2017-09-07 56 views
0

我想在离子2中显示模态并传递一些参数。这工作正常。 我的主要问题:参数绑定到navParams? 主要问题是,参数绑定到navParams?Ionic 2模态参数

var dataToPass = this.VLSMfields; 
let modal = this.modalCtrl.create(VlsmMetaDataPage,dataToPass); 
modal.onDidDismiss(data => { 
    //this.VLSMfields is already edited <- Problem 
    if(data != null){ 
     this.VLSMfields.Inputs = data; 
    } 
}); 
modal.present(); 

模态:

export class VlsmMetaDataPage { 

    constructor(public viewCtrl: ViewController,public alertCtrl: AlertController, public navParams: NavParams) { 
    } 

    Hosts = { 
    avalible : 0, 
    used : 0, 
    left:0, 
    } 
    inputs = []; 
    ionViewDidLoad() { 
    console.log('ionViewDidLoad VlsmMetaDataPage'); 
    this.Hosts.avalible = this.navParams.data.Hosts; 
    this.Hosts.left = this.navParams.data.Hosts; 
    this.inputs = this.navParams.data.Inputs; 
    } 
    closeModal(){ 
    this.viewCtrl.dismiss(null); 
    } 
    submitModal(){ 
//Gets edited before in HTML 
     this.viewCtrl.dismiss(this.inputs); 
    } 
} 

有什么不对? 我只是想设置“this.VLSMfields.Inputs”数据,如果解雇不为空。

编辑: 我希望这个代码说明了我的问题,更好地:

export class ProfilePage { 
    private test; 
    private test2; 
    constructor(public navCtrl: NavController,public viewCtrl: ViewController, private navParams: NavParams) { 
    this.test = navParams.get("data"); 
    this.test2 = navParams.get("data"); 
    } 

    ionViewDidLoad() { 
    console.log('ionViewDidLoad ProfilePage'); 
    } 
    private doSmth(){ 
    this.test.Edit = "test123"; 
    console.log(this.test); // {edit:"test123"} 
    console.log(this.test2);// {edit:"test123"} 
    } 
    private cancel(){ 
    this.navCtrl.pop(); 
    } 
    private submit(){ 
    this.navCtrl.pop(); 
    } 

} 

为什么有“测试2”相同的值“测试”?

回答

0

我找到了答案,...

只是,用JSON.stringify(this.object)删除奇怪的结合。 要从字符串中获取对象,请使用JSON.parse(this.objectJson);

我希望这可以帮助其他人解决同一问题。

0

你应该使用一个对象像这样将您的数据的模式:

let modal = this.modalCtrl.create(VlsmMetaDataPage, { data: dataToPass }); 

然后你就可以得到它在你的模式是这样的:

public params; 
constructor(navParams: NavParams) { 
    this.params = navParams.get('data'); 
} 

您正在访问的NavParams实例直接通过data属性,并且因为NavParams是注射剂,所以如果不使用get()方法,则直接修改数据。您可以找到NavParams文档here

+0

感谢您的回复。这对我不起作用。同样的行为,dataToPass更改为“this.params”的值。 –

+0

是的,因为它是在构造函数中分配的? – David

+0

也许它可以帮助我解释我在编辑中描述的问题?提前致谢! –