AngularJs一次绑定和布尔运算符的值顺序
AngularJs one time binding and order of values with boolean operators
布尔运算符的声明顺序有什么影响?
控制器:
$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文档中的表达式:
一次性表达式一旦稳定就会停止重新计算,如果表达式结果为未定义的值(参见下面的值稳定算法)。
因此,它本身不计算一次,它将计算为一个值一次。
相关文章:
- 这是什么 ==- javascript 运算符
- jQuery/JS包含运算符或类似运算符
- javascript中的布尔条件
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- AngularJs一次绑定和布尔运算符的值顺序
- = vs === 布尔表达式的运算符
- &=运算符来减少布尔值
- 逻辑运算符||在javascript中,0代表布尔值false
- JavaScript中布尔值的指数运算符
- 0对'0'使用布尔运算符
- 布尔值的按位赋值运算符,而不是更长表达式(|= 运算符)
- JavaScript布尔表达式中的多个比较运算符
- “铸造”的目的是什么?布尔运算符的返回值
- JS中布尔运算符的优先顺序是什么?
- 做&&并且||运算符将其操作数转换为布尔值
- 布尔运算符如何工作||
- 为什么赋值运算符返回非布尔值
- 关于用和运算符改变标志布尔状态的问题
- 为什么在Javascript中布尔运算符可能既不返回false也不返回true ?
- 布尔运算符没有按预期工作