离子警报:等到按下按钮

时间:2016-10-19 09:16:55

标签: ionic-framework promise alert

我有一个课程Action,其方法为do(),其中 IonicAlert 被调用。 我现在要做的是,我称之为 Action.do().then( () => { /* do domething */ } ); 但只有在警报点击确定后才会显示。

do(): Promise<boolean> {

    let alert = this.alertCtrl.create({
      buttons: [{
        text: 'OK',
        handler: () => {
          alert.dismiss().then( () => { /* do something */ });
          return false;
        }
      }]
    });

    alert.present();
    return null;
  }
}

我添加return null;只是为了没有错误,但当然它不起作用。 任何想法,如何解决这个问题?感谢

PS:我也把它发布到离子论坛:https://forum.ionicframework.com/t/ionic-alert-wait-until-button-is-pressed/67448

4 个答案:

答案 0 :(得分:4)

在此网站的帮助下找到解决方案:https://basarat.gitbooks.io/typescript/content/docs/promise.html

do(): Promise<boolean> {
    return new Promise((resolve, reject) => {

      let alert = this.alertCtrl.create({
        buttons: [{
          text: 'OK',
          handler: () => {
            alert.dismiss().then(() => { resolve(true); });
            return false;
          }
        }]
      });

      alert.present();

    });
  }
}

答案 1 :(得分:4)

这是一个可以返回true或false的版本:

 showConfirm(): Promise<boolean> {
    return new Promise((resolve, reject) =>{
      const confirm = this.alertCtrl.create({
        title : 'Are you sure ?',
        buttons: [
          {
            text: 'Yes',
            handler:_=> resolve(true)
          },
          {
            text: 'No',
            handler:_=> resolve(false)
          }
        ]
      }).present();
    })
  }

致电承诺:

this.showConfirm().then((result) => {
        if(result){
          // do something
        }
})

答案 2 :(得分:1)

这对我有用

handler: () => {
           console.log(this.viewCtrl.dismiss());
         }

答案 3 :(得分:0)

该代码在Ionic4中对我不起作用。这样做了:

presentAlert():Promise<boolean> {
  return new Promise((resolve, reject) => {
    const ctl = this.alertController;
    let alert:any = this.alertController.create({
      buttons: [{
        text: 'OK',
        handler: () => {
          ctl.dismiss().then(() => { resolve(true); });
          return false;
        }
      }]
    }).then((dlg) => dlg.present());
  });
}