我对这个错误感到困惑,我发现ExpressionChangedAfterItHasBeenCheckedError
错误,我试图了解ngAfterContentInit
但我不知道如果有人能告诉我,我怎么能在我的情况下使用它为什么会出现这个问题。 _state
用于防止循环调用。
private password_disabled: any;
private sudo: any;
private locked: any;
private password_disabled_state = false;
private sudo_state = false;
private locked_state = false;
constructor(.....) {}
afterInit(entityForm: any) {
this.isNew = entityForm.isNew;
this.password_disabled = entityForm.formGroup.controls['password_disabled'];
this.sudo = entityForm.formGroup.controls['sudo'];
this.locked = entityForm.formGroup.controls['locked'];
this.password_disabled.valueChanges.subscribe((password_disabled)=>{
if(password_disabled && !this.sudo_state && !this.locked_state){
entityForm.setDisabled('sudo', password_disabled);
entityForm.setDisabled('locked', password_disabled);
this.password_disabled_state = password_disabled;
} else {
this.password_disabled_state = !this.password_disabled_state;
entityForm.setDisabled('sudo', !this.sudo_state);
entityForm.setDisabled('locked', !this.locked_state);
}
})
this.locked.valueChanges.subscribe((locked)=>{
if(locked && !this.password_disabled_state){
entityForm.setDisabled('password_disabled', locked);
this.locked_state = locked;
}
else{
this.locked_state = !this.locked_state;
}
});
this.sudo.valueChanges.subscribe((sudo)=>{
if(sudo && !this.password_disabled_state){
entityForm.setDisabled('password_disabled', sudo);
this.sudo_state = sudo;
}
else{
this.sudo_state = !this.sudo_state;
}
});
ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'id: true'. Current value: 'id: false'.
答案 0 :(得分:0)
如果您从afterInit
更改为ngOnInit
,这可能会自行解决。这是错误的,因为html刚刚从组件模板生成,但是您正在修改用于生成html的值。所以它抱怨这个错误。
ngOnInit
将允许在从模板生成html之前修改这些值。
ngAfterContentInit()
在Angular将外部内容投射到组件的视图 /指令所在的视图后响应。在第一个ngDoCheck()之后调用一次。
ngOnInit()
在Angular首次显示数据绑定属性并设置指令/组件的输入属性后初始化指令/组件。在第一次ngOnChanges()之后调用一次。
<小时/> 就个人而言,我不会使用
ngAfterContentInit()
,除非我试图在DOM中查询某些元素然后对其进行操作,如Jquery动画或其他某些行。