(更改)angular2中的事件挂钩

时间:2016-01-30 12:02:52

标签: javascript events angular logical-operators

我知道angular2中的(更改)event Binding,但我很惊讶为什么我的代码没有按预期工作?

我的代码在这里..

http://plnkr.co/edit/9pSWSeqBc5oaSAtsfwNY?p=preview

调用更改事件时,两个条件都不按预期工作。

(change)="holiday= !holiday && employee= !employee"

当第一次调用change事件时它正常工作,但第二次它只适用于第一个条件,即holiday。在我的例子中,我所期望的是值为true或false,但不是预期的值。

肯定有一些错误。有没有人可以正确解释(change)事件的生命周期?

1 个答案:

答案 0 :(得分:6)

您应该使用&&而不是(change)="holiday= !holiday;employee= !employee" 运算符将它们分开。

如果第一个表达式出错,则不会评估下一个表达式。

&&
  

a && b运算符如何运作?

     
      
  1. 假设false,如果两者都为真,那么只返回true(简而言之,不应该有任何a && b值,否则它将返回false)。
  2.   
  3. 在评估a代码时,首先会检查true值是否为b,然后只有解释器会将a值评估为值false。如果b重视自己的价值   a && b然后它不评估(检查)false的值,holiday= !holiday && employee= !employee   表达式将返回holiday
  4.   

在你employee之前。在初始加载false& checkbox的值为holiday= !holiday && employee= !employee。当您点击holiday时,它会评估employee true& holiday= !holiday值变为holiday

在第一次true评估时,false成为holiday= !holidaytrue& true表达式返回最新值(返回holiday = true),第二个表达式是否做同样的事情&返回employee = true

现在holiday= !holiday && employee= !employee& holiday= !holiday。再次单击复选框时。它称改变事件&再次尝试评估false&&返回false的位置,正如我在上面提到的那样 holiday = false运算符如何工作?。它不关心表达式的下一部分,并返回employee = true值。

现在holiday&amp; true。如果您再次点击复选框,则employee会转到true&amp;继续评估false <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:textSize="40dp" android:id="@+id/button" android:text="Dummy Job" android:layout_width="match_parent" android:layout_height="wrap_content"/> <!-- <android.support.v7.widget.RecyclerView android:id="@+id/jobStats" android:layout_width="match_parent" android:layout_height="wrap_content"> </android.support.v7.widget.RecyclerView> --> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="40dp" android:text="New Text" android:id="@+id/viewMachine" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="40dp" android:text="New Text" android:id="@+id/viewItem" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="40dp" android:text="New Text" android:id="@+id/viewDate" /> <LinearLayout android:id="@+id/testing" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40dp" android:text="Button" android:id="@+id/bJobOpen" android:layout_weight="1" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="40dp" android:text="Button" android:id="@+id/bJobEdit" android:layout_weight="1" /> <Button android:layout_width="245dp" android:layout_height="wrap_content" android:text="Button" android:id="@+id/bJobExport" android:textSize="40dp" android:layout_weight="1" /> </LinearLayout> </LinearLayout> 来自 LinearLayout layout = (LinearLayout) findViewById(R.id.ReportsLayout); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 1f); //layout.setLayoutParams(lp); //layout.setLayoutParams(lp); //layout.setOrientation(LinearLayout.HORIZONTAL); TextView viewMachine = new TextView(Reports.this); TextView viewItem = new TextView(Reports.this); TextView viewDate = new TextView(Reports.this); LinearLayout horLayout = new LinearLayout(context); Button enterJob = new Button(Reports.this); Button editJob = new Button(Reports.this); Button exportJob = new Button(Reports.this); //enterJob.setLayoutParams(lp); //editJob.setLayoutParams(lp); //exportJob.setLayoutParams(lp); if( button.isChecked()==(true)) { layout.addView(viewMachine,lp); layout.addView(viewItem,lp); layout.addView(viewDate,lp); layout.addView(enterJob,lp); layout.addView(editJob, lp); layout.addView(exportJob, lp); } else{ //layout.setVisibility(View.INVISIBLE); } } }; } 的{​​{1}}的其他表达部分。