因为我已经创建了一个离子应用程序,具有基本的延迟加载实现。假设为了示例,我的应用包含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
的订阅方法也应该在发布该事件后起作用。不是吗?请帮帮我。
答案 0 :(得分:1)
您的Page2 延迟加载,因此尚未创建。
Ionic Events为您发布的每个事件创建一个列表。这包含一个回调列表,您可以在订阅事件时添加回调函数。发布事件时,将调用列表中存在的回调。
当您在第1页中发布时,如果您的页面2尚未加载,则不会调用回调,因为它当时不在列表中。
答案 1 :(得分:-1)
您必须在发布活动之前运行subscribe
方法。
它就像电视节目一样。订阅者是您的电视。出版商是节目。您需要在演出前打开电视,否则您将错过它。