当splice()元素时,完成ng-repeat的Angular指令

时间:2014-02-20 14:07:36

标签: angularjs angularjs-directive angularjs-ng-repeat

我已经为Angular创建了一个指令,以了解ng-repeat何时完成。我发现最常见的解决方案是使用here - Calling a function when ng-repeat has finished

但是,为什么指令只是在添加元素时触发而不是在删除时才触发?

Here - ng-repeat list in Angular is not updated when a model element is spliced from the model array我已经看到了一些关于制作$ scope的建议。$ apply,但仍然没有工作,因为它说'$ apply has in progress'

我已经创建了 here - a Plunker,您可以在其中重现它。

非常感谢!!!

2 个答案:

答案 0 :(得分:4)

将指令添加到集合时,该指令的作用是在将每个重复元素添加到dom时调用链接函数。当第一次呈现集合以及将项目添加到集合的末尾时,这非常有用。当项目被添加到集合中的其他位置时,它不起作用,例如在开始时,因为为新元素调用了链接函数,但$ last将为false。

当从集合中删除某个项目时,不会创建任何指令,因此不会调用任何链接函数。

要获得你想要的东西,你可以在集合上创建一个监视,并在$ timeout中执行你想要做的任何事情,以便在渲染之后完成:

$scope.$watchCollection('ta', function(){
    $timeout( function(){
        // the collection has rendered so do all my whizzy stuff
    });
});

答案 1 :(得分:0)

最有可能的原因是,当项目被拼接时,ng-repeat不会遍历整个数组。它只是从数组中删除该项并删除关联的DOM节点。

我不知道你究竟想要实现什么,但是如果你需要对ng-repeat列表中的变化作出反应,为什么不只是看$而不是数组呢?