文档的getElementById在NG重复的DOM元素返回null
问题描述:
用帆布项目
我已经NG-重复循环:文档的getElementById在NG重复的DOM元素返回null
<ul>
<li ng-repeat="item in todos">
<canvas id="canvas-{{item.Guid}}"></canvas>
</li>
</ul>
某处在代码中,有功能addTodo,这是莫名其妙地想:
$scope.todos.push(newTodo);
$scope.renderPDF(newTodo.Attachment,cxId);
其中,cxId是画布ID,而renderPDF使用getElementById在画布上呈现某些内容。 但是,当我添加待办事项,虽然在Chrome开发者控制台有正确的编号的画布,我得到的错误,在cxId上的getElementById返回null。 所有工作都正确完成,Angular使用双向数据绑定,那么为什么会出现问题?
答
我想解释一下,因为它很奇特。 Angular使用双向数据绑定,但在ng-book中我读到了这个过程。 并且所有在视图中的参数(在这种情况下,还包括生成画布ID的todos),所有这些参数都在范围内。根据他们的变化,有变化的观点。这个过程是双向数据绑定。它发生在消化循环中。所以有一段时间要做到这一点,当我推动待办事项数组时,它还没有开始这个摘要循环。 解决办法是强制添加元素阵列后消化周期,什么都会听的变化范围变量:
相反的:
$scope.todos.push(newTodo);
$scope.renderPDF(newTodo.Attachment,cxId);
应该有:
$scope.todos.push(newTodo);
$scope.apply();
$scope.renderPDF(newTodo.Attachment,cxId);
适用法强制实施消化周期。
你什么时候运行'.getElementById'?在ngRepeat编译元素之前还是之后? –
将元素添加到数组后使用它。在添加到数组之后和使用getElementById之后有一段时间。但我想我在摘要周期结束前调用getElementById,所以通过ng-repeat编译.. – cyan