如何知道DOM何时完成渲染

时间:2014-05-06 16:12:55

标签: javascript angularjs

我试图在AngularJS(ng-repeat)中自动生成en元素之后,弄清楚如何知道DOM何时就绪。

就我而言,我在表格中创建了一个新行(在数组上是ng-repeat),我希望立即以编程方式触发行内元素的click事件。它并不起作用,因为在触发click时,Angular尚未创建DOM元素。

我想拥有的东西(一个事件)可以告诉我" 嘿我已经完成了你的DOM元素的创建,继续做你想做的任何事情&#34 ;.我搜索了类似的东西,但没有找到能做到这一点的任何东西。

I created a plunkr说明了问题。

1 个答案:

答案 0 :(得分:2)

你在$ timeout的正确轨道上,但你不需要很长的延迟。 Angular需要有机会更新DOM。通过在没有第二个参数的情况下调用$ timeout,你基本上可以说“在当前工作线程完成后立即执行此操作”,因此只要Angular完成修改DOM就会运行。

$scope.add_row = function() {
  $scope.table_rows.push({text: 'blabla'});
  var row = '#row'+($scope.table_rows.length-1)+' input';
  $timeout(function() {
    $(row).click();
  });
}

编辑:话虽如此,这可能是指令更好的地方。操作DOM(甚至只是触发点击事件)不是你应该在控制器中做的事情。这是让你入门的另一个问题:How to register event while angularjs finish rendering UI