我有一个自定义指令myDirective
,可以对元素执行任务。
我在ng-if
块
<div ng-if="condition">
<div my-directive></div>
</div>
像这样的小提琴:http://jsfiddle.net/hGnvv/只有ng-if
条件在加载$http
请求后变为true。
该指令可能在运行时编译,但从未链接,因此代码永远不会运行。如果我将ng-if
替换为ng-show
,则该指令正常工作。
任何解决方案?
修改:我无法使用ng-show
因为我在表单中有130个指令。无论如何都会运行20个指令,另一个根据我的对象类型运行。
ng-if="type == 1"
然后加载这些元素ng-if="type == 2"
然后加载其他元素等。如果我将ng-if
更改为ng-show
,表单需要加载8秒而不是1秒。
答案 0 :(得分:2)
ng-if
条件最初为false,因此该元素在DOM中不存在且指令未链接。
当ng-if条件稍后变为true
时,链接回调应该正确触发,如以下示例所示:
单击按钮时将ng-if
设置为true:http://jsfiddle.net/q05gret0/
在加载ng-if
请求后将$http
设置为true:http://jsfiddle.net/fhu8ky62/1/
如果您没有收到此行为,则问题可能出在继承范围内;检查ng-if
是否正在监视请求更新的同一范围变量。 This article在父/子范围变量阴影和其他限制上有几点。
答案 1 :(得分:2)
问题不在于该指令没有运行,而是我内部的$watch
函数根本没有运行。我没有设法理解问题的确切原因,因为同一指令在ng-if
之外正常工作。
无论如何将$watch
改为 - &gt; $watchCollection
它现在运行正常,因为它会看到我观看的对象的所有更新。
答案 2 :(得分:0)
例如,如果您的模型与$scope.item = true
类似,并且您将其用作ng-if="item"
,则应将模型更改为$scope.myvalue = {}
并使用如下所示:ng-if="myvalue.item"
。意味着你应该使用ng-if
的对象属性而不是简单的值