1

嘿伙计们,所以我有以下困境:

我有一个 ng-repeat 和另一个 ng-repeat 和另一个 ng-repeat 等等(创建类似于二叉树结构但具有多个根的东西)。问题是我的数据被插入到正确的结构中,并且正在等待摘要在屏幕上实际显示所有内容,因为某些结构非常大。我怎么知道摘要何时完成渲染我的结构的最后一个元素?我在我的 ng-repeates 中添加了以下内容,但执行了很多次,因为 ng-repeats 也可以是 ng-repeated ...我如何仅在最后一个模板加载时发出信号,而不是每次模板加载时? 这是我感谢另一个线程在 ng-repeat 完成时调用函数

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


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

问题是这会为最后一个 ng-repeat 触发,但我无法确定最后一个嵌套的 ng-repeat 何时完成。有没有办法检测到摘要已完成渲染我的所有模板和嵌套模板?

4

1 回答 1

0

通常这只会通过观察$scope.$last您的特定重复来处理。

但是,如果我们在运行时加载大量数据,也许 Angular$postDigest可以救命!

PS 不要$emit在这种情况下使用。请记住,指令可以与您在任何控制器中需要的任何范围链接并修改它们的值,并且总体而言 -除非绝对必要,否则应始终避免使用$emitor 。$broadcast

app.directive('resolveApplication', function($timeout) {
    return {
        restrict:'A',
        link: function (scope) {
            // start by waiting for digests to finish
            scope.$$postDigest(function() {
                // next we wait for the dom to be ready
                angular.element(document).ready(function () {
                    // finally we apply a timeout with a value
                    // of 0 ms to allow any lingering js threads
                    // to catch up
                    $timeout(function() {
                        // your dom is ready and rendered
                        // if you have an ng-show wrapper 
                        // hiding your view from the ugly 
                        // render cycle, we can go ahead 
                        // and unveil that now:
                        scope.ngRepeatFinished = true;
                    },0)
                });
            });
        }
    } 
});
于 2016-03-21T21:02:50.133 回答