我的AngualrJS(1.x)应用程序有一个自定义指令来进行文本框验证。该指令需要用作元素。需要验证的文本框应该在指令元素中。该指令具有编译功能,具有验证逻辑。
该指令工作得很好。但我有一个场景,我需要根据单选按钮点击显示/隐藏文本框。为了实现这一点,我尝试将指令保留在ng-if
内,但是一旦指令在ng-if内,编译函数就不会被触发。我试图将逻辑保留在链接功能中,但链接功能也没有被触发。我无法将指令保留在ng-show
旁边,因为在隐藏的情况下,所需的字段验证仍然有效,并且不想在ng-required
中使用条件。
有什么方法可以让我的指令在ng-if中执行?我不确定为什么它没有被执行。任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
ng-if
和ng-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"
如果选中复选框,则只会标记该字段。