如何将Aurelia EventAggregator与ViewModel生命周期同步

时间:2016-02-28 23:17:06

标签: aurelia aurelia-navigation aurelia-event-aggregator

基本上我尝试使用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]

显然这不是我预期的执行流程。有人可以解释一下我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我无法在Chrome 48中复制您的控制台日志流程。我会说您可能应该考虑将subscribeOnce调用放在类的构造函数中,以确保EventAggregator尽早知道您的订阅。

请注意,attached是组件生命周期的一部分,而不是路由器页面生命周期的一部分,因此您最好使用activate方法而不是attached方式无论你在这种情况下做什么。在没有更多上下文的情况下,我无法确定哪种方法适合您的用例,但您可能需要仔细检查。如果你想给我一些帮助,我今天应该可以在Gitter上找到。