堆叠的三元运算符在Angularjs表达式中不起作用

时间:2015-02-13 15:43:13

标签: javascript angularjs expression ternary-operator

ng-disabled="{{sroFieldStatus ? ( sroFieldStatus==2 ? true: false ):true}}"

它位于angularJS的html模板中。有时,sroFieldStatus将从0,1,2的集合中变为价值。想法是ng-disable仅在sroFieldStatus = 1时变为FALSE,而在0或2时不变为。

我意识到,无论sroFieldStatus变成什么值,我所做的三元语句似乎总是被重视为真。

我想知道我做错了什么部分?

谢谢

3 个答案:

答案 0 :(得分:1)

您不需要插值。直接使用

ng-disabled="sroFieldStatus != 1"

阅读ngDisabled文档

  

如果表达式是真实的,那么将在元素上设置特殊属性“disabled”

答案 1 :(得分:1)

由于答案没有澄清 - 我会将我在评论中所写的内容收集到答案中。

问题是你正在插值,这意味着它将初始表达式值呈现给HTML,并且永远不会改变,之后就没有绑定了因为ng-directives可以评估范围对象,所以不需要对它们进行插值

  实际上,因为事实上,第一级三元操作已经是“真正的”,所以后来在第二级,它将会被认为是真正的无懈可击的事实吗? / p>

准确地说,在您的情况下,标记呈现如下:

ng-disabled="true"

当然永远不会改变。

如果你希望只有当值为1时才禁用伪,那么你可以准确地写出它而没有三元组的进一步复杂化:

ng-disabled="sroFieldStatus != 1"

请参阅此示例以更好地理解插值和非插值版本之间的区别:



angular.module('app', [])
.controller('Ctrl', function($scope, $timeout){
  $scope.flag = false;
  $timeout(function(){
    $scope.flag = true;
  }, 3000) // simulating a change after 3 secs
})

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="app" ng-controller="Ctrl">
    <input placeholder="regular" ng-disabled="flag" />
    <input placeholder="interpolated" ng-disabled="{{flag}}" />
  </body>
&#13;
&#13;
&#13;

Plunker version

答案 2 :(得分:-2)

如果您使用三元运算符,请务必在冒号周围留出空格以及问号:

ng-disabled="{{sroFieldStatus ? ( sroFieldStatus==2 ? true : false ) : true}}"

但是==运算符已经返回true或false,因此可以缩短为:

ng-disabled="{{sroFieldStatus ? (sroFieldStatus == 2 ) : true}}"