例外:在检查离子输入后,表达式发生了变化

Posted

技术标签:

【中文标题】例外:在检查离子输入后,表达式发生了变化【英文标题】:EXCEPTION: Expression has changed after it was checked ion-input 【发布时间】:2018-06-03 20:50:19 【问题描述】:

我正在尝试创建一个编辑,所以我创建了一个表单,然后我分配了值。但我得到一个错误

ExpressionChangedAfterItHasBeenCheckedError:表达式已更改 检查后。以前的值:'未定义'。当前值: 'XXXXXX'。

这是我的edituser.ts

import  Component  from '@angular/core';
import  IonicPage, NavController, NavParams  from 'ionic-angular';
import  Storage  from '@ionic/Storage';

/**
 * Generated class for the EdituserPage page.
 *
 * See https://ionicframework.com/docs/components/#navigation for more info on
 * Ionic pages and navigation.
 */

@IonicPage()
@Component(
  selector: 'page-edituser',
  templateUrl: 'edituser.html',
)
export class EdituserPage 

    fullname : any;
    Deskripsi : any;
    phone:any;
    Email:any;
    user_id:any
  userData = "username": "","password": "", "fullName": "","Email": "", "Deskripsi" : "", "Phone":"";

  constructor(public navCtrl: NavController, public navParams: NavParams,public storage: Storage) 

  
ionViewDidLoad() 
      this.storage.get('userData').then((val) => 
               this.fullname = val.fullname;
               this.Deskripsi = val.Deskripsi;
               this.phone = val.phone;
               this.Email = val.Email;
               this.user_id = val.user_id;
        );
  

  update()
        console.log(this.userData);
  



这是我的表单edituser.html

<ion-list margin-top>
    <ion-item>        
            <ion-label> <ion-icon name="person"></ion-icon></ion-label>
            <ion-input [(ngModel)]="userData.fullname" value="fullname" type="text"></ion-input>
    </ion-item>

     <ion-item>        
            <ion-label> <ion-icon name="md-phone-portrait"></ion-icon></ion-label>
            <ion-input  [(ngModel)]="userData.phone" value="phone"  type="text"></ion-input>
    </ion-item>

    <ion-item>        
            <ion-label> <ion-icon name="md-mail"></ion-icon></ion-label>
            <ion-input  [(ngModel)]="userData.Email" value="Email"  type="text"></ion-input>
    </ion-item>

    <ion-item>        
            <ion-label> <ion-icon name="md-megaphone"></ion-icon></ion-label>
            <ion-textarea  [(ngModel)]="userData.Deskripsi" value="Deskripsi"  type="text"></ion-textarea>
    </ion-item>

    <ion-item>        
        <button ion-button color="secondary" (click)="update();" float-right>Update</button>
    </ion-item>

</ion-list>

我该如何解决这个问题?

【问题讨论】:

Angular 2 - Expression has changed after it was checked的可能重复 【参考方案1】:

由于角度生命周期导致此错误。使用enableProdMode 运行您的项目,如下所示。

在您的 app.module.ts(您定义项目引导和其他组件注册的主要组件)中

import  Component, NgModule, enableProdMode  from "@angular/core";

export class AppModule 


enableProdMode();

【讨论】:

enableProdMode(); 不只是不输出错误吗?我不认为这是一个可行的修复,错误仍然会发生,但由于启用了生产模式,它只是没有将其打印到控制台。 正如@moritzg 所说,这既不是修复也不是解决方法。它只是隐藏打印的错误。【参考方案2】:

ionViewDidLoad 似乎不是正确的钩子。这听起来好像视图已经完成加载,这意味着所有绑定都已设置。之后您更改绑定,这可能会导致此问题。

您应该将您的 storage.get 移动到 ngOnInit 生命周期挂钩

【讨论】:

【参考方案3】:

这是一个生命周期错误。 Angular 告诉您,在其生命周期检查期间,您更改了一个变量,但它丢失了。

为避免这种情况,您可以将 ionViewDidLoad() 的内容包装到超时中,或在其他地方调用它。顺便问一下,你怎么称呼它?

【讨论】:

以上是关于例外:在检查离子输入后,表达式发生了变化的主要内容,如果未能解决你的问题,请参考以下文章

ngIf 表达式在检查后发生了变化

检查后表达式发生了变化 - 角度

使用反应式表单在 Angular 中检查后,表达式发生了变化

Angular 2 / PrimeNG - 表达式在检查后发生了变化。在最后一个无效的表单控件上绑定 NgModel

在我的表格组件中检查后,表达式发生了变化

如何在离子 1 中只允许输入一个小数点