我有一个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") });
任何建议都表示赞赏。
答案 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() )