• 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

  • 相关阅读:
    Android——活动的基本用法
    开课第五周周总结
    java常用框架
    javaweb学习
    每日日报2021.3.23
    每日日报2021.3.22
    每日日报2021.3.21
    每日日报2021.3.19
    每日日报2021.3.18
    每日日报2021.3.17
  • 原文地址:https://www.cnblogs.com/wjw1014/p/11313167.html
Copyright © 2020-2023  润新知