我知道angular2中的(更改)event Binding
,但我很惊讶为什么我的代码没有按预期工作?
我的代码在这里..
http://plnkr.co/edit/9pSWSeqBc5oaSAtsfwNY?p=preview
调用更改事件时,两个条件都不按预期工作。
(change)="holiday= !holiday && employee= !employee"
当第一次调用change事件时它正常工作,但第二次它只适用于第一个条件,即holiday
。在我的例子中,我所期望的是值为true或false,但不是预期的值。
肯定有一些错误。有没有人可以正确解释(change)
事件的生命周期?
答案 0 :(得分:6)
您应该使用&&
而不是(change)="holiday= !holiday;employee= !employee"
运算符将它们分开。
如果第一个表达式出错,则不会评估下一个表达式。
&&
a && b
运算符如何运作?
- 假设
false
,如果两者都为真,那么只返回true(简而言之,不应该有任何a && b
值,否则它将返回false)。- 在评估
醇>a
代码时,首先会检查true
值是否为b
,然后只有解释器会将a
值评估为值false
。如果b
重视自己的价值a && b
然后它不评估(检查)false
的值,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
<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}}的其他表达部分。