Ionic AlertController作为服务

时间:2017-04-30 15:11:01

标签: angular ionic-framework ionic2

我已将Ionic 2提示放在提供者(服务)中,如此...

showPromptOk(title, message, callback) {    

       let prompt = this.alertCtrl.create({
          title: title || 'Alert!',
          message: message,
          buttons: [
            {
              text: 'Ok',
              handler: data => {
                if(callback) callback(data);
              }
            }
          ]
        });
        prompt.present();
      }

我称之为......

updateAccount() {
    let self = this;
    this.sk_account.update(this.account)
      .subscribe((res) => {
          this.sk_utils.showPromptOk('Success!', 'Your account has been updated!',  (res) => {

            self.edit_account = false;
            self.edit_school = false;

          });
        }
      )
  }

问题是,在这种情况下“this”或“self”不再有效,它成为提供者(服务)的上下文。如何设置处理程序以将“范围”传递回原始调用者的顶部,以便在设置值时,它们实际上是在原始组件范围内设置它们,而不是提供者范围?

更新1:

添加回调(数据)后,我注意到视图模型不再更新。您可以在控制台中看到值现在设置为false,但视图上的{{edit_account}}插值未更新。请注意,视图上的变量仍为“true”。有什么想法吗?

still true

请注意,在控制台中,数据不是false,但视图未更新。 enter image description here

1 个答案:

答案 0 :(得分:0)

尝试使用Subject:showPromptOk接受Subject,然后处理程序调用“ next method” 在“帐户”组件中,添加一个主题及其订阅,更新逻辑必须在订阅中

Ps:主题必须是静态的

static AccountMustBeUpdated: Subject<any> = new Subject<any>();

ionViewDidLoad(){
AccoutsPage.AccountMustBeUpdated.subscribe(
() => { /* Your update logic here*/} );

不要忘记退订该主题以避免麻烦