【发布时间】:2014-02-15 10:43:50
【问题描述】:
我有一个 auto-carousel 指令,它遍历链接元素的 children。
然而,孩子们还没有加载到 DOM 中,因为他们的 ng-ifs 表达式还没有被解析。
如何确保父指令知道它的 DOM 树发生了变化?
<ul class="unstyled" auto-carousel>
<li class="slide" ng-if="name">{{name}}</li>
...
<li class="slide" ng-if="email">{{email}}</li>
</ul>
我可以使用$timeout,但这感觉不可靠。我也可以使用ng-show 而不是ng-if,但这不能回答问题,也不是我需要的。
【问题讨论】:
-
根据 angularJS 文档,子指令优先于父指令。所以 ng-if 在父指令之前链接。所以解析顺序不是你的问题。也许您的数据是异步可用的,因此 ng-if 不会在链接时解析。
-
@Alborz 这很有趣。你有链接吗?如果是这种情况,我感觉指令在填充子元素的模型之前已链接,我将执行测试并回复您。不要忘记我的链接!
-
@Alborz 链接功能肯定会在模型填充后发生。我什至用了一个额外的
$scope.$apply()。 -
我创建了一个示例。您将看到子链接在父链接之前执行。jsbin.com/udaTEraM/1/edit
-
@Alborz 感谢您花时间进行设置。但是我在
ng-if的$watch处理程序中添加了一个console.log- 它显然是在父链接器之后执行的。有什么办法可以在孩子改变后调用父链接器?比如,注意 DOM 变化? (观察模型变化是个问题,因为这个指令是通用的并且到处都在使用)
标签: angularjs dom angularjs-directive angular-ng-if