离子事件在延迟加载的模块之间无法正常工作

时间:2018-02-21 03:47:47

标签: angular events ionic-framework javascript-events ionic3

因为我已经创建了一个离子应用程序,具有基本的延迟加载实现。假设为了示例,我的应用包含2个 延迟加载 页面, Page1 &的第2页

所以在 page1.ts 的构造函数中,我发布了一个名为 hello 的事件,并在其中 page2.ts 的构造函数,我已订阅该特定事件。

我的应用以Page1开头。

但是在运行应用程序之后,我发现直接从hello的构造函数发布事件Page1时,我的订阅活动尚未订阅。你可以帮我解决这个问题,为什么我的订阅方法(在Page2构造函数内)没有收听来自Page1的已发布事件。

示例代码:

page1.ts (app以此开头)

constructor(public events: Events) {
    this.events.publish('hello', 'some data');
    console.log('Published');
}

page2.ts

constructor(public events: Events) {
    this.events.subscribe('hello', (data) => {
        // This isn't working in case of lazy-loading
        console.log('subscribed to hello with data', data);
    });
}

只要我的应用启动,只有Published会登录到控制台。之后没有任何反应。但根据我对离子事件的理解,Page2的订阅方法也应该在发布该事件后起作用。不是吗?请帮帮我。

2 个答案:

答案 0 :(得分:1)

您的Page2 延迟加载,因此尚未创建。

Ionic Events为您发布的每个事件创建一个列表。这包含一个回调列表,您可以在订阅事件时添加回调函数。发布事件时,将调用列表中存在的回调。

当您在第1页中发布时,如果您的页面2尚未加载,则不会调用回调,因为它当时不在列表中。

答案 1 :(得分:-1)

您必须在发布活动之前运行subscribe方法。
它就像电视节目一样。订阅者是您的电视。出版商是节目。您需要在演出前打开电视,否则您将错过它。