这是因为在第一次更改时,触发更改侦听器的变化检测尚未启动。解决此问题的方法是使用Zone.run()方法显式触发变化检测。示例代码如下:
import { Component, NgZone } from '@angular/core';
import { FormArray, FormBuilder } from '@angular/forms';
@Component({
selector: 'app-form-array',
template: `
`,
})
export class FormArrayComponent {
form: FormGroup;
get items(): FormArray {
return this.form.get('items') as FormArray;
}
constructor(private fb: FormBuilder, private zone: NgZone) {}
ngOnInit() {
this.form = this.fb.group({
items: this.fb.array(['Item 1', 'Item 2']),
});
this.items.valueChanges.subscribe((_) => {
console.log('Value changed!');
});
this.zone.runOutsideAngular(() => {
this.items.controls[0].setValue('New item', { emitEvent: true });
});
this.zone.run(() => {});
}
}