如何在angular2中使用FormControl statusChanges?

时间:2017-02-21 06:58:05

标签: angular

我是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

2 个答案:

答案 0 :(得分:6)

如评论所述,您可能希望使用valueChanges。但是,对于成千上万的其他人{@ {1}}的工作来这里搜索,您可以:

statusChanges

The docs描述这四个可能的值,如下所示:

  
      
  • 有效:此控件已通过所有验证检查。
  •   
  • 无效:此控件未通过至少一项验证检查。
  •   
  • 待审核:此控件正在进行验证检查。
  •   
  • 已禁用:此控件免于验证检查。这些状态值是互斥的,因此控件不能同时是有效和无效的,也不能是无效和禁用的。
  •   

答案 1 :(得分:3)

在反应形式valueChangesstatusChanges中,两者看起来非常相似,但有两个不同的用途。

statusChanges

statusChangesAbstractControl的属性,每次重新计算控件的验证状态时都会发出一个事件。 is explained in the other answer

的状态很少

valueChanges

valueChangesAbstractControl的属性,每次使用UI或以编程方式更改控件的值时,都会发出一个事件。

因此,valueChanges对执行saving when the form is dirty等很有用。

提示AbstractControl的属性意味着您可以将这些事件附加到FormControlFormArrayFormGroup

示例: 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);
    });
}

enter image description here

A detailed comparison can be found here