我知道angular2中的(更改)event Binding
,但令我惊讶的是为什么我的代码无法按预期工作?
我的代码在这里。
http://plnkr.co/edit/9pSWSeqBc5oaSAtsfwNY?p=preview
调用更改事件时,两种条件均无法按预期工作。(change)="holiday= !holiday && employee= !employee"
第一次调用change事件时,它可以正常工作,但是第二次它仅对第一个条件(即holiday
)有效。在我的示例中,我期望的值都是true或false,但不是预期的。
肯定有一些错误。有谁能正确解释(change)
事件的生命周期?
最佳答案
您应该使用;
而不是&&
运算符将它们分开。
如果第一个表达式出错,则不会计算下一个表达式。
(change)="holiday= !holiday;employee= !employee"
在您使用
holiday= !holiday && employee= !employee
之前。初始加载时,holiday
和employee
都具有false
值。当您单击checkbox
时,它将评估holiday= !holiday && employee= !employee
,holiday
和employee
的值都变为true
。基本上在第一个
holiday= !holiday
求值之后,holiday
变成true
到false
和holiday= !holiday
表达式返回最新值(返回true
),第二个表达式是否执行相同的操作并返回true
。现在为
holiday = true
和employee = true
。当您再次单击复选框时。它调用更改事件,然后再次尝试评估holiday= !holiday && employee= !employee
。holiday= !holiday
返回false
的位置,因此正如我在上面提到的一样&&
运算符如何工作? 。它不在乎表达式的下一部分,并返回false
值。现在为
holiday = false
和employee = true
。如果再次单击复选框,那么holiday
会变成true
并继续评估表达式的其他部分,由此employee
会从true
变成false
。