【问题标题】:Ionic AlertController as Service离子警报控制器即服务
【发布时间】:2017-09-28 04:57:42
【问题描述】:

我已将 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}} 插值没有得到更新。请注意,该变量在视图上仍然是“真”。有什么想法吗?

在控制台中注意,数据不是假的,但视图没有更新。

【问题讨论】:

  • 我想你忘了在这里传递数据:handler: data => { if(callback) callback(data); }
  • 这是错字吗?
  • 是什么错字?
  • 我的第一条评论..您没有将数据传递给showPromptOk中的回调..这是您的问题中的错字还是代码中的错误?
  • 是的,但这将如何自动解决我的问题?我不需要对这些数据做些什么吗?

标签: angular ionic-framework ionic2


【解决方案1】:

尝试使用主题:showPromptOk 获取主题,处理程序调用“下一个方法” 在 Account 组件中,添加一个主题及其订阅,更新逻辑必须在订阅中

Ps:主题必须是静态的

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

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

别忘了退订主题以免麻烦

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多