我正在开发一个自定义指令,现在我需要处理ng-if。当ng-if在它自己的指令上时,这很容易。但是当ng-if在封闭容器元素上时,我的编译函数会因运行时错误而失败。
问题是:在指令的编译函数中,最有效和最有效的方法是将该指令包含在容器中,其中ng-if为false或表达式的计算结果为false。
例如:
<div ng-if="false">
<my-directive></my-directive>
</div>
另一个例子:
<div ng-if="somescopeValue > 300">
<my-directive></my-directive>
</div>
也许答案是使用jquery遍历dom并找到父母 一个ng-if属性,但我想知道是否还有另一个&#34; angular&#34;这样做的方式。
答案 0 :(得分:1)
您的指令不应该依赖于知道它是否封装在ng-if表达式中。这打破了“关注点分离”的原则。并恶化代码重用。考虑重新设计自定义指令,使其不需要知道其主机元素,就像所有组件(应该)一样。
答案 1 :(得分:0)
如果您使用与父控制器或指令相同的范围,那么您也可以在指令中访问相同的变量(此处为 my-directive )。如果不是这种情况,则需要编写代码以访问 my-directive 的链接功能中的父元素。您将获得link函数中的指令元素作为参数。
答案 2 :(得分:0)
我不确定错误是如何发生的,因为当你的指令在ng-if="false"
内时,你的指令根本不会被调用 - 指令中的所有编译,链接和控制器函数都将只有在DOM中添加指令后才会运行。
也许你的错误可以通过在没有添加指令的情况下初始化来解决。