将值分配给显示错误的输入字段:ExpressionChangedAfterItHasBeenCheckedError

Posted

技术标签:

【中文标题】将值分配给显示错误的输入字段:ExpressionChangedAfterItHasBeenCheckedError【英文标题】:Assigning value to input field showing error: ExpressionChangedAfterItHasBeenCheckedError 【发布时间】:2018-02-09 06:07:46 【问题描述】:

我正在从本地存储中拆分一个字符串并将其放入数组中,如下所示:

file.ts

getskills: Array<string> = [];
// a,b,c is the value in getskills

  ionViewDidLoad() 
    this.getskills  = JSON.parse(localStorage.getItem("profskill")).split(',');
    console.log(this.getskills[1]);
    // The answer is b in  console window
  

现在在我的file.html 中,我有一个输入字段,我希望它的值为this.getskills[1],但是当我分配它时,我得到以下错误:

运行时错误 ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改。以前的值:''。当前值:'b'。

file.html参考代码:

<ion-item>
  <ion-input [(ngModel)]="skills" type="text" #skills1 (keyup.enter)="save(skills1.value); skills1.value='' " placeholder="skills" [value] = "getskills[0] ? getskills[0]: ''"></ion-input>
</ion-item>

如何将该值分配给我的输入字段?

【问题讨论】:

【参考方案1】:

如果你的更新是在 Angular 检查视图之后发生的,就会发生这种情况。

快速而肮脏的方式是;

注入 ChangeDetectorRef

constructor(private changeDetectorRef:ChangeDetectorRef)

ionViewDidLoad() 
 this.getskills  = JSON.parse(localStorage.getItem("profskill")).split(',');
    console.log(this.getskills[1]);
    // The answer is b in  console window
     this.changeDetectorRef.detectChanges();
    // run the change detection manually
  

但解决此类问题的正确方法是将您的更新(ionViewDidLoad) 移到更好的时刻。

不要忘记,当您对模型(`getskills')进行更改时,您需要确保 Angular 不会这样做。

编辑:

ionViewDidLoad() 
     this.skills  = JSON.parse(localStorage.getItem("profskill")).split(',')[0];
        console.log(this.getskills[1]);
        // The answer is b in  console window
         this.changeDetectorRef.detectChanges();
        // run the change detection manually
      

<ion-item>
  <ion-input [(ngModel)]="skills" type="text" #skills1 (keyup.enter)="save(skills1.value); skills1.value='' " placeholder="skills"></ion-input>
</ion-item>

【讨论】:

错误消失了,但仍然没有加载值,我正在使用此代码[value] = "getskills[0] ? getskills[0]: ''",我可以在我的控制台中看到结果console.log(this.getskills[0]);

以上是关于将值分配给显示错误的输入字段:ExpressionChangedAfterItHasBeenCheckedError的主要内容,如果未能解决你的问题,请参考以下文章

C - 将值分配给结构数组的分段错误

链表:将值分配给节点的下一部分时出现分段错误错误

如何在文本字段之后显示一个图标作为“帮助”以将值输入文本字段

将值传递给不是来自 Django ModelForm 中的输入的必填字段

如何将值分配给数组中的随机位置?

将值从数据库传递到 vue 组件并将其分配给变量