调用setValue时,FormControl ValueChanges事件未触发

时间:2017-08-30 12:38:57

标签: angular

我有一个Angular 4预先输入组件的代码如下: FormGroup中有一个FormControl,与html绑定,效果很好。

this.ProfileForm.controls["code"]

当我在文本框中更改时,valueChanges事件正在触发。现在,当我通过编程方式更新formcontrol值时,valueChanges事件未触发。 以下是我编写的代码行。

this.ProfileForm.controls["code"].setValue("someValue");

this.ProfileForm.controls["code"].valueChanges.subscribe(() => {
            console.log("modified");}, () => { console.log("error") }, () => { console.log("completed") });

任何建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

将其更改为先订阅然后再设置为值

this.ProfileForm.controls["code"].valueChanges.subscribe(() => {
            console.log("modified");}, () => { console.log("error") }, () => { console.log("completed") });

this.ProfileForm.controls["code"].setValue("someValue");

因为在您的代码中,您在尚未订阅时正在改变价值。

答案 1 :(得分:0)

这可能会有所帮助。 由于设置了错误的值,我也遇到了类似的问题。

this.formGroup = this._formBuilder.group({
  city: [new Location()]
});

this.cityControl = this.formGroup.get('city');

this.citiesListOptions = this.cityControl.valueChanges.pipe(
  map(name => this._filterCity(name))
);

当我使用这个时:

this.cityControl.patchValue(null); 

然后cityControl.valueChanges不会再次触发。

当我对此进行纠正后,就会起作用:

this.cityControl.patchValue(new Location() )