我知道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之前。初始加载时,holidayemployee都具有false值。当您单击checkbox时,它将评估holiday= !holiday && employee= !employeeholidayemployee的值都变为true

基本上在第一个holiday= !holiday求值之后,holiday变成truefalseholiday= !holiday表达式返回最新值(返回true),第二个表达式是否执行相同的操作并返回true

现在为holiday = trueemployee = true。当您再次单击复选框时。它调用更改事件,然后再次尝试评估holiday= !holiday && employee= !employeeholiday= !holiday返回false的位置,因此正如我在上面提到的一样&&运算符如何工作? 。它不在乎表达式的下一部分,并返回false值。

现在为holiday = falseemployee = true。如果再次单击复选框,那么holiday会变成true并继续评估表达式的其他部分,由此employee会从true变成false

10-07 14:25