布尔运算符的声明顺序有什么影响?
控制器:
$scope.show = false;
$scope.clickMe = function() {
$scope.show = true;
$scope.name = 'Name defined'
};
模板:
<button ng-click="clickMe($event)">Click Me</button>
<p ng-if="::(show && name)">show && name</p>
<p ng-if="::(name && show)">name && show</p>
单击按钮后,会产生第二个p
元素,显示顺序为name && show
。我知道p
元素都不应该显示为$scope.show
已经定义并且使用了一次绑定?
plunkr在这里:
http://plnkr.co/edit/P0E1RhNK9EPh2Pi04c9T?p=preview
在Angular中,一次绑定将不断计算表达式,直到它具有非undefined
值。因此,在您的示例中,由于名称尚未定义,name && show
在每次摘要中都会一直计算为undefined
,直到您最终设置它。如果您使用!!
将名称强制为布尔值,则会得到不同的行为。来自Angular文档中的表达式:
一次性表达式一旦稳定就会停止重新计算,如果表达式结果为未定义的值(参见下面的值稳定算法)。
因此,它本身不计算一次,它将计算为一个值一次。