AngularJs一次绑定和布尔运算符的值顺序

AngularJs one time binding and order of values with boolean operators

本文关键字:运算符 布尔 顺序 绑定 一次 AngularJs      更新时间:2024-05-29

布尔运算符的声明顺序有什么影响?

控制器:

$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文档中的表达式:

一次性表达式一旦稳定就会停止重新计算,如果表达式结果为未定义的值(参见下面的值稳定算法)。

因此,它本身不计算一次,它将计算为一个值一次。