我怎么知道指令是否包含在ng-if = false的容器中?

时间:2016-05-06 07:34:19

标签: angularjs angularjs-directive

我正在开发一个自定义指令,现在我需要处理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;这样做的方式。

3 个答案:

答案 0 :(得分:1)

您的指令不应该依赖于知道它是否封装在ng-if表达式中。这打破了“关注点分离”的原则。并恶化代码重用。考虑重新设计自定义指令,使其不需要知道其主机元素,就像所有组件(应该)一样。

答案 1 :(得分:0)

如果您使用与父控制器或指令相同的范围,那么您也可以在指令中访问相同的变量(此处为 my-directive )。如果不是这种情况,则需要编写代码以访问 my-directive 的链接功能中的父元素。您将获得link函数中的指令元素作为参数。

答案 2 :(得分:0)

我不确定错误是如何发生的,因为当你的指令在ng-if="false"内时,你的指令根本不会被调用 - 指令中的所有编译,链接和控制器函数都将只有在DOM中添加指令后才会运行。

也许你的错误可以通过在没有添加指令的情况下初始化来解决。