Nic*_*las 15 eventemitter typescript angular
我的子模块中的每个EventEmiiter都会出现此错误,但我无法找到解决方法.
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'true'. Current value: 'false'.
这是触发我的EventEmitter的原因:
ngOnChanges(changes: any) {
if (changes.groupingTabValid) {
if (changes.groupingTabValid.currentValue !== changes.groupingTabValid.previousValue) {
this.groupingTabValidChange.emit(this.groupingTabValid);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的"主要"组件的HTML
<year-overview-grouping [definitionDetails]="definitionDetails"
[fixedData]="fixedData"
[showValidation]="showValidation"
[groupingTabValid]="groupingTabValid"
(groupingTabValidChange)="setValidators('groupingTab', $event)">
</year-overview-grouping>
Run Code Online (Sandbox Code Playgroud)
哪个叫这个功能
public setValidators(validator: string, e: boolean) {
switch (validator) {
case "groupingTab":
this.groupingTabValid = e;
break;
case "selectionTab":
this.selectionTabValid = e;
break;
}
if (this.groupingTabValid && this.selectionTabValid) {
this.valid = true;
} else {
this.valid = false;
}
}
Run Code Online (Sandbox Code Playgroud)
1)在一个简单的解释中,是什么导致了这个错误?
2)我可以采取哪些措施来解决这个问题?
小智 11
遵守单向数据流规则
尝试使用setTimeout将调用推迟一个tick
if (changes.groupingTabValid.currentValue !== changes.groupingTabValid.previousValue) {
setTimeout(() => this.groupingTabValidChange.emit(this.groupingTabValid), 0)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19324 次 |
最近记录: |