我是angular2的新手,我想在用户选择dropDown中的某个值时触发一个函数。所以我试图实现FormControl类的statusChange,但它没有被触发,
想知道如何以及何时在angular2中使用statusChange 这是我的代码
class policy{
subCategory: FormControl = new FormControl();
ngOnInit() {
this.subCategory.statusChanges.subscribe(
s => {
alert('success');
}, e => {
alert('error');
}, () => {
alert('complete');
}
);
}
}
我认为通过实现statusChanges,我可以在下拉列表中的每次值变化时触发成功函数,显然它现在正在工作。
更新1
我更新了plunkr
答案 0 :(得分:6)
如评论所述,您可能希望使用valueChanges
。但是,对于成千上万的其他人{@ {1}}的工作来这里搜索,您可以:
statusChanges
The docs描述这四个可能的值,如下所示:
- 有效:此控件已通过所有验证检查。
- 无效:此控件未通过至少一项验证检查。
- 待审核:此控件正在进行验证检查。
- 已禁用:此控件免于验证检查。这些状态值是互斥的,因此控件不能同时是有效和无效的,也不能是无效和禁用的。
答案 1 :(得分:3)
在反应形式valueChanges
和statusChanges
中,两者看起来非常相似,但有两个不同的用途。
statusChanges
是AbstractControl
的属性,每次重新计算控件的验证状态时都会发出一个事件。 is explained in the other answer
valueChanges
是AbstractControl
的属性,每次使用UI或以编程方式更改控件的值时,都会发出一个事件。
因此,valueChanges
对执行saving when the form is dirty等很有用。
提示:AbstractControl
的属性意味着您可以将这些事件附加到FormControl
,FormArray
或FormGroup
示例: component.html
<form [formGroup]="form">
<h2 class="text-center">Registration Form</h2>
<br>
<div class="form-group">
<input type="text" class="form-control" placeholder="first Name" formControlName="firstName">
</div>
<div class="form-group">
<input type="text" class="form-control" placeholder="last Name" formControlName="lastName">
</div>
<div class="form-group">
<input type="email" class="form-control" placeholder="email" formControlName="email">
<span *ngIf="form.controls['email']?.errors?.required">This field is required</span>
</div>
<br>
<div *ngIf="form.valid">
Valid form
</div>
</form>
component.ts
ngOnInit() {
this.form = this.fb.group({
firstName: ['', Validators.required],
lastName: [''],
email: ['', Validators.required],
});
this.form.valueChanges.subscribe((value) => {
console.log('valueChanges Form value ' + value);
});
this.form.statusChanges.subscribe((status) => {
console.log('statusChanges Status is ' + status);
});
}