【问题标题】:How to make IonViewDidLoad run AFTER event subscription如何让 IonViewDidLoad 在事件订阅之后运行
【发布时间】:2018-11-07 17:56:06
【问题描述】:

您好,我正在使用事件在 ionic 中将数据从 page1 传递到 page2。

在第 2 页,我使用下面的代码订阅从第 1 页传递的数据。

events.subscribe('restoProfile:selected', (restoData) => {
        this.restoData = restoData;
        console.log(this.restoData);
      });

上面一行的console.log 通过在控制台日志上显示数据可以正常工作。

问题是,我将this.restoData 用于IonViewDidLoad 中的另一个函数,但是这个函数说this.restoData 中的内容是未定义的。

我尝试添加一个调用console.log(this.restoData) 的按钮,并且this.restoData 中的内容被正确记录。

我想IonViewDidLoad 在订阅事件之前运行。

如何让 IonViewDidLoad 在订阅事件之后运行?

感谢您的帮助

【问题讨论】:

  • 你不能......你必须在事件订阅中运行逻辑
  • 谢谢!我怎么没想到。

标签: javascript angular ionic-framework


【解决方案1】:

我不太确定你的目标是什么,一些代码会有所帮助。

我猜当事件触发并且正在加载第二个页面时存在一些不一致。

我不知道这是否适用于您的情况,但我会说 restoData provider - 如果这是一组经常检索和更改的数据,否则是带有初始化成员的 data.provider restoData: Resto[] = [](或任何)。

触发事件时,您会更改提供程序上的数据,并且当您访问页面时,您已经注入了提供程序(仅在 app.module.ts 中导入,因此只有 1 个实例)并直接显示数据来自供应商。

【讨论】:

  • 谢谢乔治。是的,我创建了一个提供程序,并将逻辑放入其中。然后我在this.restoData = restoData 之后立即致电提供者。
【解决方案2】:

您可以创建一个函数“runthefunctionyouwant”而不是这样做,将您要执行的代码放入 ionviewdidload 中。事件订阅后,将恢复数据传递给“this.restoData”后调用函数“runthefunctionyouwant”

ionViewDidLoad(){
    events.subscribe('restoProfile:selected', (restoData) => {
            this.restoData = restoData;
            console.log(this.restoData);
            this.runTheFunctionYouWant();
});
}

runTheFunctionYouWant(){
//code that you want to run
}

希望对你有帮助

【讨论】:

  • 是的,伙计。那也可以。就我而言,我将函数放在提供程序中。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多