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 更改为 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 使用对象 属性 而不是简单的值