模态onDidDismiss()后的离子2事件

时间:2017-05-02 07:59:26

标签: javascript angular ionic2

我对Ionic 2开发很新,并希望得到您的帮助。有没有人知道在onDidDismiss()之后会发生什么事件?

presentProfileModal() {
   let profileModal = this.modalCtrl.create(Profile, { userId: 8675309 });
   profileModal.onDidDismiss(data => {
     console.log(data);
   });
   profileModal.present();
 }

我知道如何在模态页面onDidDismiss()之后将参数存储到父属性中。

编辑: 所以这是我无法解决的实际代码。在使用vs2015进行调试时,在调用this.viewCtrl.dismiss(this.calibration)并且我的断点位于onDidDismiss()事件后,父组件显示为未定义。内部data有值,但我无法将结果存储到父组件。

Parent Component Undefined Error Image

这是创建我的模态的代码:

public goToCalibration(calibration, seqNo) {
        this.selectedCalibrationTask = seqNo;
         let modal = this.modalCtrl.create(ModalCalibrationPage, { "calibration": calibration });
         modal.onDidDismiss(data => {
             this.value = data;
            //for (var i = 1; i < this.task.TaskItems.length; i++) {
            //    if (this.task.TaskItems[i].SeqNo == this.selectedCalibrationTask) {
            //        if (data != null) {
            //            this.task.TaskItems[i].Calibration = data;
            //        }

            //        break;
            //    }
            //}

        });
        modal.present();
    }

模态TS代码:

export class ModalCalibrationPage {
    public calibration: any;

    public constructor(public viewCtrl: ViewController, private navParams: NavParams) {
        if (this.navParams.get("calibration") != null) {
            this.calibration = this.navParams.get("calibration");
        }
        else {
            this.calibration = {
                EquipmentBefore: '',
                InstrumentBefore: '',
                ControlRoomBefore: '',
                EquipmentAfter: '',
                InstrumentAfter: '',
                ControlRoomAfter: '',
                StandardSignal: {
                    Std1: '',
                    Std2: '',
                    Std3: '',
                    Error1: '',
                    Error2: '',
                    Error3: ''
                },
                BeforeCalibration: {
                    Std1: '',
                    Std2: '',
                    Std3: '',
                    Error1: '',
                    Error2: '',
                    Error3: ''
                },
                AfterCalibration: {
                    Std1: '',
                    Std2: '',
                    Std3: '',
                    Error1: '',
                    Error2: '',
                    Error3: ''
                },
                MeasuredVoltage: '',
                StandardType: '',
                UOM: '',
                InstrumentAccuracy: '',
                InstrumentCalibrated: false,
                Remarks: ''
            };
        }
    }

    public dismiss() {
        this.viewCtrl.dismiss();
    }

    public saveCalibration() {
        this.viewCtrl.dismiss(this.calibration);
    }
}

2 个答案:

答案 0 :(得分:4)

如果我理解正确,您希望在父组件中设置data。 您应该在父级中有一个类属性,并在 onDidDismiss()回调中的数据值中设置。

value:any;

presentProfileModal() {
   let profileModal = this.modalCtrl.create(Profile, { userId: 8675309 });
   profileModal.onDidDismiss(data => {
     console.log(data);
     this.value=data;//here
     console.log(JSON.stringify(this.value,undefined,2));
   });
   profileModal.present();
 }

在ViewController的dismiss()函数中发送的模态中。 this.viewCtrl.dismiss(data)

答案 1 :(得分:0)

这是我在应用suraj解决方案后的答案。我只能在onDidDismiss()事件后将结果分配给父组件,而不是操纵任何数据。所以我希望这可以帮助那些面对同样问题的人。

家长的TS代码:

public selectedCalibrationTask: any;
public selectedSeqNo: any;

public goToCalibration(seqNo) {

    if (this.selectedSeqNo == null)
    {
        this.selectedSeqNo = seqNo;
    }   

    let modal = this.modalCtrl.create(ModalCalibrationPage, { "calibration": this.selectedCalibrationTask, "seqNo": this.selectedSeqNo });

     modal.onDidDismiss(data => {
         this.selectedCalibrationTask = data.calibration;
    });
    modal.present();
}


Modal的TS代码:

public saveCalibration() {
        this.viewCtrl.dismiss(this.calibration);
    }