当前位置 : 主页 > 编程语言 > java >

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

来源:互联网 收集:自由互联 发布时间:2022-06-30
ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. 解决方案: 异步更新(建议使用) 强制进行变更检测,但是会触发子组件的变更检测,再次导致父组件属性改变

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

 

解决方案:

  • 异步更新(建议使用)
  • 强制进行变更检测,但是会触发子组件的变更检测,再次导致父组件属性改变

Parent.Component.ts

@Component({
selector:"app-parent"
})

export class ParentComponent implements OnInit,AfterViewInit {
public text = "给子组件的信息";


constructor(private cdr: ChangeDetectorRef){}

ngOnInit(){}

// 该方法缺点: 子组件多的情况下,不易控制。不建议使用
ngAfterViewInit(){
this.cdr.detectChanges();
}
}

Child.Component.ts

@Component({
selector:"app-child"
})

export class ChildComponent implements OnInit, AfterViewInit {
@Input text;

constructor(private parentComponent: ParentComponent){}

ngOnInit(){}

ngAfterViewInit() {
// 异步更新两种方式

// 第一种
setTimeout( ()=>{
this.parentComponent.text="update message"
},2000);

// 第二种
Promise.resolve(null).then( ()=> {this.parentComponent.text="update message"});

}
}

 

 


 

【版权声明】本博文著作权归作者所有,任何形式的转载都请联系作者获取授权并注明出处!

【重要说明】本文为本人的学习记录,论点和观点仅代表个人而不代表当时技术的真理,目的是自我学习和有幸成为可以向他人分享的经验,因此有错误会虚心接受改正,但不代表此刻博文无误!

【Gitee地址】秦浩铖:​​https://gitee.com/wjw1014​​


上一篇:Angular 调用百度地图API接口
下一篇:没有了
网友评论