AngularJS:有没有办法知道何时加载了另一个指令中包含的指令?

时间:2013-08-06 18:34:49

标签: javascript jquery angularjs angularjs-directive

我有一个包含其他指令列表的指令。在每个子指令中,它们可以包含任意数量的.item HTML元素。在父指令内部,我想使用jQuery引用所有这些.item元素。所以我尝试了以下内容:

HTML结构

<parent>
  <div class='item'></div>
  <ul>
    <li ng-repeat='child in children'>
       <!-- loads template that may have one or more divs with .item on them -->
       <child='child' /> 
    </li>
  </ul>
</parent>

在父link()函数内部,我调用了$(".item").size()。在这种情况下,它总是返回1.有没有办法在所有子指令加载后调用函数,所以我可以访问所有内部.item元素?

1 个答案:

答案 0 :(得分:0)

我想,这是因为你在内部指令运行之前过早地查询DOM。 尝试:

setTimeout(function(){
   $(".item").size();
}, 0);

$timeout如果您需要在超时回调函数中执行与范围相关的操作。

您还可以尝试:

scope.$evalAsync(function(){
  $(".item").size();
});

但是如果没有代码示例,很难说哪个会工作。 您可以在此处详细了解setTimeout$evalAsync差异:AngularJS : $evalAsync vs $timeout