在Angular FormControl上调用updateValueAndValidity()
时,是否触发组件的Angular变化检测?
例如:
ngOnInit() {
this.email.updateValueAndValidity();
this.password.updateValueAndValidity();
}
此触发器更改检测两次吗?
一次致电ChangeDetectorRef.detectChanges()
更有效率吗?
这是否取决于我将emitEvent
参数设置为什么?
答案 0 :(得分:1)
为了进行测试,我使用以下代码在Angular的更改检测范围之外更改了两个不同的FormControl值。
a.value, etc..
使用ngDoCheck Lifecycle挂钩,我能够计算出运行更改检测的次数。
this.zone.runOutsideAngular(() => {
this.email.setValue('test@email');
this.password.setValue('test-password');
});
然后我在该区域内向ngDoCheck() {
console.log('checking for ', ++this.timesChecked);
}
跑了两次,发现Angular变化检测只触发了一次。即使我设置了updateValueAndValidity()
,它仍然只触发了一次。
总而言之,似乎您需要触发所有FormControl的更改检测,这足以在一个表单控件上调用{onlySelf: true, emitEvent: false}
或一次调用updateValueAndValidity()
,因为两者最终都触发了完整的更改检测循环。