Angular 表达式ChangedTerithasBeenCheckedError未定义的输入参数
绕圈子讨论如何解决这个问题。阅读到处突出显示的两个博客。理解原因,但不管我尝试什么,这个错误不会消失。错误与输入参数有关。当组件加载时,它是未定义的,然后获得正确的值 我试过使用:Angular 表达式ChangedTerithasBeenCheckedError未定义的输入参数,angular,Angular,绕圈子讨论如何解决这个问题。阅读到处突出显示的两个博客。理解原因,但不管我尝试什么,这个错误不会消失。错误与输入参数有关。当组件加载时,它是未定义的,然后获得正确的值 我试过使用: 子组件中的各种生命周期挂钩没有运气-ngOnit ngAfterViewChecked、ngAfterViewInit等 尝试使用计时器 尝试在子组件中使用ChangeDetectorRef 尝试使用*ngIf=“ComponentName” EventEmitter设置为true以允许异步 我仍然得到错误。有人
- 子组件中的各种生命周期挂钩没有运气-ngOnit
- ngAfterViewChecked、ngAfterViewInit等
- 尝试使用计时器
- 尝试在子组件中使用ChangeDetectorRef
- 尝试使用*ngIf=“ComponentName”
- EventEmitter设置为true以允许异步
Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'AreaName: undefined'. Current value: 'AreaName: dashboard'. It seems like the view has been created after its parent and its children have been dirty checked. Has it been created in a change detection hook ?
父组件ts文件。
export class Dashboard {
public ComponentName: string = "dashboard";
private showContent: boolean = false;
constructor() {}
public displayMethod(): void {}
public CanAccess(canAccess : boolean) : boolean {
return this.showContent = canAccess;
}
}
父组件Html
<div class="content-area" >
<h3>This is dashboard information</h3>
</div>
<no-access [AreaName]="ComponentName" (AllowedAccess)="CanAccess($event)"></no-access>
这是仪表板信息
子组件ts
export class NoAccess implements OnInit {
@Input() AreaName: string;
@Output() AllowedAccess = new EventEmitter<boolean>(true);
public showSubContent: boolean;
constructor(private authService : AuthenticationService) {}
ngOnInit(): void {
setTimeout(() => {
this.showSubContent = this.authService.CanRead(this.AreaName, null);
this.AllowedAccess.emit(false);
});
}
}
导出类NoAccess实现OnInit{
@输入()区域名称:字符串;
@Output()AllowedAccess=新的EventEmitter(true);
公共ShowSubcent:布尔值;
构造函数(私有authService:AuthenticationService){}
ngOnInit():void{
设置超时(()=>{
this.showsubcent=this.authService.CanRead(this.AreaName,null);
this.AllowedAccess.emit(false);
});
}
}
试试这个:
export class Dashboard {
public ComponentName: string = "dashboard";
private showContent: boolean = false;
constructor(private cd: ChangeDetectorRef) {
}
ngAfterViewInit() {
this.cd.detectChanges();
}
public displayMethod(): void {}
public CanAccess(canAccess : boolean) : boolean {
return this.showContent = canAccess;
}
}
如本文所述,imho不是最好的解决方案,但它应该可以工作。看起来子组件是在父组件之前创建的。NoAccess组件是否在其他地方使用?不,这是第一个实例,但它将在其他地方使用。如果您可以组织一次StackBlitz或其他演示此问题的内容,这将非常有用。我使用您发布的源代码整理了这一个,它似乎运行良好:不幸的是,这不起作用,我仍然得到相同的错误。我确实读过那篇博文。