ng-disabled="{{sroFieldStatus ? ( sroFieldStatus==2 ? true: false ):true}}"
它位于angularJS的html模板中。有时,sroFieldStatus
将从0,1,2的集合中变为价值。想法是ng-disable仅在sroFieldStatus
= 1时变为FALSE,而在0或2时不变为。
我意识到,无论sroFieldStatus
变成什么值,我所做的三元语句似乎总是被重视为真。
我想知道我做错了什么部分?
谢谢
答案 0 :(得分:1)
答案 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;
答案 2 :(得分:-2)
如果您使用三元运算符,请务必在冒号周围留出空格以及问号:
ng-disabled="{{sroFieldStatus ? ( sroFieldStatus==2 ? true : false ) : true}}"
但是==
运算符已经返回true或false,因此可以缩短为:
ng-disabled="{{sroFieldStatus ? (sroFieldStatus == 2 ) : true}}"