我有一个密码
我正在login.ts中
this._events.publish('user:created', 'val', Date.now());
我正在另一页上做
this._events.subscribe('user:created', (user,time) => {
// user and time are the same arguments passed in `events.publish(user, time)`
console.log('Welcome', user, 'at', time);
});
但是 _events.subscribe 中什么也没有发生。它不起作用,没有console.log。
我在做什么错了。
答案 0 :(得分:2)
将事件订阅代码放入另一页的构造函数中。
constructor(private events: Events) {
events.subscribe('user:created', (user,time) => {
// user and time are the same arguments passed in `events.publish(user, time)`
console.log('Welcome', user, 'at', time);
});
}
答案 1 :(得分:0)
听起来像是您试图在2页之间进行交流?以我的经验,除非您有中介,否则在2页之间进行交流并不十分有用。如果一个页面触发了一个事件,则可能不会实例化另一页面来听到该事件。
页面当然可以发布事件。在服务/提供者或app.component.ts中,订阅可能会更成功。然后他们可以响应已发布的事件,并导航到另一个页面或公开由事件操纵的属性,这些页面可以根据需要使用这些属性。
答案 2 :(得分:0)
登录后,您可以调用事件发布方法。
在组件中声明变量。
例如:某些:任意
以所需的任何方法发布事件。
this._events.publish('user:created',this.some =“ data”,Date.now());
然后,您可以在另一页的构造函数中订阅事件。
constructor(private events: Events) {
this._events.subscribe('user:created', (user,time) => {
console.log('Welcome', user, 'at', time);
});
}
答案 3 :(得分:0)
其他答案部分正确,但是如果要在构造函数中使用订阅,则必须确保第二个页面已经订阅后发布者才能发布。
它在您有订阅者时有效,您可以使用:
ionViewDidLeave() {
this.events.publish('queue:name', object);
}