AngularJS ng-if 中的指令不会 运行
AngularJS directive within ng-if won't run
我有一个自定义指令 myDirective
在元素上执行任务。
我在 ng-if
块中有这个指令
<div ng-if="condition">
<div my-directive></div>
</div>
类似这样的事情 fiddle:http://jsfiddle.net/hGnvv/ 在我的 $http
请求加载后,只有 ng-if
条件变为真。
该指令可能在 运行 期间编译,但从未链接,因此代码从未 运行s。如果我用 ng-show
替换 ng-if
指令工作正常。
有什么解决办法吗?
编辑:我无法使用ng-show
,因为我在表单中有130 个指令。无论如何,20 个指令 运行,另一个 运行 根据我的对象类型。
ng-if="type == 1"
然后加载这些元素
ng-if="type == 2"
然后加载其他元素等
如果我将 ng-if
更改为 ng-show
,则加载表单需要 8 秒而不是 1 秒。
ng-if
条件最初为假,因此该元素在 DOM 中不存在并且指令未 linked。
当 ng-if 条件稍后变为 true
时,link 回调应该正确触发,如以下示例所示:
单击按钮时将 ng-if
设置为真:http://jsfiddle.net/q05gret0/
在加载 $http
请求后将 ng-if
设置为真:http://jsfiddle.net/fhu8ky62/1/
如果您没有遇到此行为,则问题可能出在继承范围;检查 ng-if
正在监视您的请求正在更新的同一范围变量。 This article 关于 parent/child 作用域变量阴影和其他限制有几点要点。
问题不是指令不是 运行ning,而是我在其中的 $watch
函数根本没有 运行。我没能理解问题的确切原因,因为相同的指令在 ng-if
之外工作正常。
无论如何将我的 $watch
更改为 -> $watchCollection
现在它工作正常,因为它看到我正在 $watching 的对象的所有更新。
例如,如果您的模型类似于 $scope.item = true
,而您使用它的方式类似于 ng-if="item"
,您应该将模型更改为 $scope.myvalue = {}
并像这样使用:ng-if="myvalue.item"
,在我的意思是你应该为 ng-if
使用对象 属性 而不是简单的值
我有一个自定义指令 myDirective
在元素上执行任务。
我在 ng-if
块中有这个指令
<div ng-if="condition">
<div my-directive></div>
</div>
类似这样的事情 fiddle:http://jsfiddle.net/hGnvv/ 在我的 $http
请求加载后,只有 ng-if
条件变为真。
该指令可能在 运行 期间编译,但从未链接,因此代码从未 运行s。如果我用 ng-show
替换 ng-if
指令工作正常。
有什么解决办法吗?
编辑:我无法使用ng-show
,因为我在表单中有130 个指令。无论如何,20 个指令 运行,另一个 运行 根据我的对象类型。
ng-if="type == 1"
然后加载这些元素ng-if="type == 2"
然后加载其他元素等
如果我将 ng-if
更改为 ng-show
,则加载表单需要 8 秒而不是 1 秒。
ng-if
条件最初为假,因此该元素在 DOM 中不存在并且指令未 linked。
当 ng-if 条件稍后变为 true
时,link 回调应该正确触发,如以下示例所示:
单击按钮时将 ng-if
设置为真:http://jsfiddle.net/q05gret0/
在加载 $http
请求后将 ng-if
设置为真:http://jsfiddle.net/fhu8ky62/1/
如果您没有遇到此行为,则问题可能出在继承范围;检查 ng-if
正在监视您的请求正在更新的同一范围变量。 This article 关于 parent/child 作用域变量阴影和其他限制有几点要点。
问题不是指令不是 运行ning,而是我在其中的 $watch
函数根本没有 运行。我没能理解问题的确切原因,因为相同的指令在 ng-if
之外工作正常。
无论如何将我的 $watch
更改为 -> $watchCollection
现在它工作正常,因为它看到我正在 $watching 的对象的所有更新。
例如,如果您的模型类似于 $scope.item = true
,而您使用它的方式类似于 ng-if="item"
,您应该将模型更改为 $scope.myvalue = {}
并像这样使用:ng-if="myvalue.item"
,在我的意思是你应该为 ng-if
使用对象 属性 而不是简单的值