AngularJS - 每次重新渲染ng-repeat时检测完成事件

时间:2016-12-13 09:42:07

标签: javascript angularjs

每次 ng-repeat完成呈现视图时,我需要调用函数。我第一次看到ng-repeat的简单解决方案是使用ng-init="$last ? function() : angular.noop,其中'function'是要调用的函数。

同样,人们可以编写一个自定义指令,例如在ng-repeat finish event但是,到目前为止,我没有成功找到一个解决方案,当我有一个动态ng-repeat

e.g。当在中间添加或删除项目或在过滤时,$ last将在这些情况下为false。总是可以在列表的末尾添加和删除虚拟条目,但这似乎不是一个合适的解决方案。

欢迎任何建议。感谢。

1 个答案:

答案 0 :(得分:0)

遵循JMK的建议(感谢你),我做了以下似乎有效,但看起来有点天真 - 所以欢迎任何改进建议。该指令在渲染的开始和结束时调用两个不同的函数。

HTML

<div ng-repeat="item in itemsArray" on-finish-render="{items: itemsArray}">
  {{item}}
</div>

JS

    .directive("onFinishRender", ["$parse", "$timeout", function ($parse, $timeout) {    
        return {
            restrict: "A",
            link: function (scope, element, attr) {
                var model = $parse(attr.onFinishRender);
                scope.$watch(model, function (newValue, oldValue) {                         
                    if (scope.$index === 0) {
                        //At the start do stuff 
                    }
                    if (scope.$index === newValue.items.length - 1) {
                        //At the end do some other stuff
                    }
                }, true);
            }
        };
    }]);