ExpressionChangedAfterItHasBeenCheckedError ng如果值更改

时间:2018-12-09 16:45:49

标签: angular

在我的代码中,我遇到ngIf值更改错误,并且不确定执行此操作的正确方法是什么。 这是我的HTML:

<div *ngIf="currentVlaue">
            <div class="section-body">
                <div class="form-group">
                    <label>Name</label>
                    <input [(ngModel)]="currentValue.name"
                           type="text"
                           class="form-control" required />
                </div>
           </div>
</div>

在我的组件中,我有:

public currentValue: ValueModel;
@Input() public values: ValuesModel[];

constructor(){}  

ngOnInit(){}  

ngOnChanges(changes: SimpleChanges){
let indexOfValues = "someValue";
        if (changes[indexOfValues ] &&
            changes[indexOfValues ].indexOfValues  &&
            changes[indexOfValues ].previousValue !== changes[indexOfValues ].currentValue) {
            if (this.values && this.values.length > 0) {
                this.indexOfValues  = this.actions[0];
            }
        }
}

我也有addValue,editValue,deleteValue和saveValue方法。 我有什么办法可以解决此错误?

2 个答案:

答案 0 :(得分:1)

您需要使用属性默认值(空)创建模型currentValue。另外,请删除ngIf代码。

public currentValue: ValueModel = {
   name: ''
};
@Input() public values: ValuesModel[];

constructor(){}  

ngOnInit(){}  

https://stackblitz.com/edit/angular-9ywghz?file=src%2Fapp%2Fapp.component.ts

答案 1 :(得分:-1)

原因::{{1}如果更改检测被触发并计划更新视图,并且在此之间进行更改,那么profile_data就会出现。

解决方案1::当我们以names模式而不是headers = ['Time','Bid','Ask'] df = pd.read_csv('quotes_format.csv', names=headers)模式运行应用程序时,将发生此错误。在ExpressionChangedAfterItHasBeenCheckedError中,我们可以在development之前production您的主模块中。

main.ts

解决方案2 :在enableProdMode()中手动进行呼叫更改检测。

bootstrapping