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"});
        
    }
}
复制代码

 

 

参考原文:https://blog.csdn.net/friend_ship/article/details/81773057

 

posted @   叫我+V  阅读(2516)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示