ngRepeat完成后触发

时间:2014-07-10 09:57:20

标签: javascript angularjs angularjs-ng-repeat

在指令中我需要具有元素的宽度,但是此元素是在ng-repeat中创建的。因此,当我的link函数中的代码运行时,ngRepeat尚未执行。我试图使用$timeout推迟一些事情,但这没有帮助

JS:

link: function (scope, element) {
    $timeout(function () {
        var width = $(element.find('li')).width(); // the li elements do not exist
    });
}

HTML:

<ol>
    <li ng-repeat="item in items">
        <my-item>.....</my-item>
    </li>
</ol>

我无法使用<ol>元素,因为<my-item>具有边距/填充等样式。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

来自ng-repeat finish event

<ol>
    <li ng-repeat="item in items" on-complete>
        <my-item>.....</my-item>
    </li>
</ol>

-

.directive('onComplete', function() {
  return function(scope, element, attrs) {
    angular.element(element).css('color','blue');
    if (scope.$last){
      window.alert("im the last!");
    }
  };
})

http://plnkr.co/edit/or5mys?p=preview

答案 1 :(得分:1)

您可以使用scope.$last to generate an event when the last item is done或只运行您需要的代码。

您可能还想考虑您的设计。你的问题可以有任何CSS解决方案吗?如果没有继续。