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

时间:2017-12-21 08:05:44

标签: angular ionic-framework ionic3

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

  

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

这是我的edituser.ts

tx.executeSql('INSERT INTO items (parameter1, parameter2)' + ' VALUES(?,?);',[1,2], 
    function(tx, results){
        console.log("l =", l)
        console.log("k =", k)
        console.log("i =", i)
    }
);

这是我的表格edituser.html

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);
  }


}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

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

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

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

export class AppModule {

}
enableProdMode();

答案 1 :(得分:0)

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

您应该将storage.get移至ngOnInit生命周期挂钩

答案 2 :(得分:0)

这是生命周期错误。 Angular告诉你,在它的生命周期检查中,你改变了一个变量,它就丢失了。

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