我试图在AngularJS(ng-repeat
)中自动生成en元素之后,弄清楚如何知道DOM何时就绪。
就我而言,我在表格中创建了一个新行(在数组上是ng-repeat
),我希望立即到以编程方式触发行内元素的click
事件。它并不起作用,因为在触发click
时,Angular尚未创建DOM元素。
我想拥有的东西(一个事件)可以告诉我" 嘿我已经完成了你的DOM元素的创建,继续做你想做的任何事情&#34 ;.我搜索了类似的东西,但没有找到能做到这一点的任何东西。
I created a plunkr说明了问题。
答案 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