如果ng-if中存在指令,则AngularJS指令的编译功能不会被执行

时间:2016-07-18 04:07:35

标签: javascript jquery angularjs

我的AngualrJS(1.x)应用程序有一个自定义指令来进行文本框验证。该指令需要用作元素。需要验证的文本框应该在指令元素中。该指令具有编译功能,具有验证逻辑。

该指令工作得很好。但我有一个场景,我需要根据单选按钮点击显示/隐藏文本框。为了实现这一点,我尝试将指令保留在ng-if内,但是一旦指令在ng-if内,编译函数就不会被触发。我试图将逻辑保留在链接功能中,但链接功能也没有被触发。我无法将指令保留在ng-show旁边,因为在隐藏的情况下,所需的字段验证仍然有效,并且不想在ng-required中使用条件。

有什么方法可以让我的指令在ng-if中执行?我不确定为什么它没有被执行。任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

ng-ifng-show都用于显示/隐藏DOM元素,但它们之间的主要区别在于ng-if="expression"删除了元素(当然它是所有子元素)如果expression评估为false,则为DOM。

虽然ng-show="expression"仅根据.ng-hide类(添加display: none)隐藏元素。

因此,当您使用ng-if并且表达式求值为false时,由于ng-if具有更高的优先级,因此其他指令将不会运行或编译。这就是你的自定义指令没有执行的原因。

使用ng-show代替ng-if

修改

我刚刚重新阅读了您的问题,并且因为必要的字段验证而发现您不能ng-show。我也得到了解决方案。

使用ng-required代替required并使用您在ng-show中使用的相同表达式(目前在ng-if中),如下所示:

ng-required="sameExpressionAsInNgShow"

如果选中复选框,则只会标记该字段。