如何为"ng-disabled"添加多个条件?

Mat*_*att 43 angularjs angularjs-directive

在启用按钮之前,我需要检查两个条件是否都为真:

这是一个例子:

<button type="submit" ng-disabled="frmUser.pw2.$error.pwMatch" class="btn btn-primary" ng-click="ChangePassword()">Change</button>
Run Code Online (Sandbox Code Playgroud)

此示例仅包含一个条件ng-disabled.我如何添加另一个如范围变量?

Dav*_*yon 66

你应该能够满足&&条件:

ng-disabled="condition1 && condition2"
Run Code Online (Sandbox Code Playgroud)

  • 或者你可以使用ng-disabled ="condition1 || condition2",取决于你的逻辑条件. (9认同)

mlg*_*g87 21

万尼是对的.该&&运营商并不在HTML工作.使用Angular时,必须||对多个条件使用双管道().

  • 好吧,这个答案是不正确的.&&表示逻辑AND,|| 意味着逻辑OR.因此,如果您的条件需要te才能使控件被禁用,请使用&&.如果其中一个或两个都需要为true,请使用||. (10认同)
  • 为什么有这么多人提出这个错误的答案呢?&&在Angular表达式中工作正常. (7认同)
  • 我看着你的jsbin.我觉得你把所有那些"不"都搞糊涂了!它按预期工作.尽量不要使用双重否定,那么所有这些逻辑表达式突然变得更有意义,而你(和其他任何人)可以更容易理解你的代码:而不是!$ vaild使用$ invalid,而不是!items.length写项目.长度> 0. (2认同)

小智 14

在原始问题的措辞中可能有一些问题:

在启用按钮之前,我需要检查两个条件是否都为真

首先要记住的是,ng-disabled指令正在评估按钮应该被禁用的条件,但原始问题是指应该启用它的条件.它将在ng-disabled表达式不是"truthy"的任何情况下启用.

因此,首先要考虑的是如何将问题的逻辑重新定义为更接近ng-disabled的逻辑要求.检查两个条件为真以启用按钮的逻辑反转是,如果任一条件为,则应禁用该按钮.

因此,在原始问题的情况下,ng-disabled的伪表达式是"如果condition1为false condition2为false 则禁用按钮".转换为Angular(https://docs.angularjs.org/guide/expression)所需的类似Javascript的代码段,我们得到:

!condition1 || !条件2

Zoomlar说得对!


zoo*_*lar 9

确保以正确的优先级包装条件

ng-disabled="((!product.img) || (!product.name))"
Run Code Online (Sandbox Code Playgroud)


Wan*_*lli 6

实际上ng-disabled指令对我来说与"||"逻辑运算符一起使用."&&"仅评估一个条件.

http://jsbin.com/kuqilejesi/2/edit?html,js,output

  • 抱歉,绝对没有"奇怪的行为" - 它的行为与JS &&运算符完全相同:逻辑AND运算符,只有在需要确定最终结果时才计算第二个参数.例如"a && b" - >如果a为假,则不需要评估b,结果无论如何"假" (4认同)
  • 是的(看看我的答案:"&""仅评估一个条件.",这就是为什么如果你需要检查多个条件以启用/禁用按钮,&&运算符不是正确的解决方案. (3认同)