我有一个反应式地址表(地址行1,地址行2,镇,县,邮编,国家),这是预期的工作。在开发时,我用 {{ myForm.value | json }} .
{{ myForm.value | json }}
我现在添加了一个第三方地址查找控件,它在选择地址时触发回调函数。在这个回调函数中,我用地址查找器返回的值更新表单控件对象,例如。
callback(address:any):void { this.line1.setValue(returnedAddress.Line1, { emitEvent: true }); }
其中,line1是对创建并添加到FormGroup的FormControl的引用。
当调用此回调时,HTML输入控件将用新地址行1更新,但不会更新整个表单值。
如果我给HTML输入控件焦点,然后关闭tab,表单值就会更新。
我假设,因为更新超出了常规的angular线程,所以它缺少了更改,但我无法解决如何通知angular此更改—我尝试的更改检测内容似乎与更新视图有关,而不是表单值。
我不能放弃。。。所以我尝试了以下方法,希望它能更新:
this.ngZone.run(() => { this.changeRef.markForCheck(); });
但后来随机尝试将更新放在角度区域内,结果是:
this.ngZone.run(() => { this.line1.setValue(returnedAddress.Line1, { emitEvent: true }); });
关键是角度 zone 直到现在我才发现。
zone