3

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

控制器:

$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

4

1 回答 1

4

在 Angular 中,一次绑定会不断地计算表达式,直到它有一个非undefined值。因此,在您的示例中,因为 name 尚未定义,但在每个摘要上name && show不断评估,直到您最终设置它。undefined如果您使用!!将名称强制为布尔值,那么您将获得不同的行为。来自关于表达式的 Angular 文档

一次性表达式一旦稳定就会停止重新计算,如果表达式结果是未定义的值,则在第一次摘要之后发生(请参阅下面的值稳定算法)。

所以它本身不会评估一次,它会评估一次值

于 2016-04-13T13:10:31.270 回答