javascript - ng-repeat动态完成后的Angular JS回调

标签 javascript jquery angularjs angularjs-directive angularjs-ng-repeat

有大量的帖子展示了如何基于指令拥有回调函数,以便在 ng-repeat 函数完成时您可以等待然后调用函数。例如,这是我的例子。

<div ng-repeat="Object in Objects" class="objectClass" on-finish-render>{{Object.Overlay}</div>

然后当它完成后调用我的函数

.directive('onFinishRender', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, element, attr) {
            if (scope.$last === true) {
                $timeout(function () {
                    scope.$emit('ngRepeatFinished');
                }, 0);
            }
        }
    }
});

完成后成功调用下面的函数

$scope.$on('ngRepeatFinished', function(ngRepeatFinishedEvent) {
    //my code goes here
}

现在,在我第一次设置 $scope.Objects 变量时,所有这些都可以正常工作并且符合预期。我的代码将等到所有对象都被完全渲染然后运行,简直是完美的。但是,如果在最初的所有内容之后我再次更改 $scope.Objects ,我的函数仍将运行但不会等待完成。它实际上可以通过控制台日志看到,第一次循环它会在我进入指令之后但在实际发出之前暂停大约半秒钟,但是在我的 ng-repeat 的后续更改中它不会暂停并且只是在之前调用我的函数dom渲染完成。

这太烦人了,任何帮助都会很棒!

最佳答案

关于 ng-repeat 您应该了解的一件事是它尽可能重用 DOM 元素,因此如果您的中继器中有两个对象并添加第三个,则前两个元素将不会被重用重新渲染。只有第三个会被渲染,因此你的指令的链接函数只会为新添加的对象调用一次。

同样,如果您删除一个项目,您的指令的链接功能将不会再次运行。

观察此 JSFiddle 中的行为.

关于javascript - ng-repeat动态完成后的Angular JS回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35143922/

相关文章:

javascript - 将目录中的所有 JavaScript 文件包含到 AngularJS 中的 html 文件中?咕噜声?

javascript - Protractor 不等待重定向

使用 Web api 的 AngularJS 客户端路由和 token 身份验证

JavaScript 连接应该计数的数字

javascript - 在php中使用javascript上传图像

javascript - 如何从不同的服务器连接到 websocket?

javascript - 在图库中同时触发单独的悬停效果(jQuery + CSS)

javascript - 自定义 DatePicker 在 GridView 中不起作用

javascript - 从Mongo查询返回的数据的错误处理

javascript - 在服务器端提交消息后关闭模态弹出窗口