基本上我尝试使用Router.navigate函数在两个视图之间导航(让我们称之为view1和view2)模型。我需要在导航期间将一些数据从view1传递到view2,并且我使用事件Aurelia的事件聚合器,如下所述。此外,view2有一个我需要在订阅事件中访问的参考项目。
视图1
...
this.router.navigate("view2").then(() => {
console.log("Publishing message");
this.eventAggregator.publish(new ShareDataMessage(dataToShare));
});
视图2
...
attached() {
console.log("View attached");
console.log("RefItem 1: " + this.refItem);
this.eventAggregator.subscribeOnce(ShareDataMessage, message => {
console.log("Event received")
console.log("RefItem 2: " + this.refItem);
});
}
但是,如果我运行应用程序,并从view1导航到view2,我会得到以下输出:
Publishing message
Event received
RefItem 2: null
View attached
RefItem 1: [object HTMLImageElement]
显然这不是我预期的执行流程。有人可以解释一下我错过了什么吗?
答案 0 :(得分:1)
我无法在Chrome 48中复制您的控制台日志流程。我会说您可能应该考虑将subscribeOnce调用放在类的构造函数中,以确保EventAggregator尽早知道您的订阅。
请注意,attached
是组件生命周期的一部分,而不是路由器页面生命周期的一部分,因此您最好使用activate
方法而不是attached
方式无论你在这种情况下做什么。在没有更多上下文的情况下,我无法确定哪种方法适合您的用例,但您可能需要仔细检查。如果你想给我一些帮助,我今天应该可以在Gitter上找到。