В основном я пытаюсь перемещаться между двумя видами (назовем их view1 и view2) с использованием функции Router.navigate. Мне нужно передать некоторые данные из view1 в view2 во время навигации, и для этого я использую агрегатор событий событий Aurelia, как описано ниже. Кроме того, view2 имеет элемент ref, который мне нужен для доступа внутри события подписки.Как синхронизировать Aurelia EventAggregator с жизненным циклом ViewModel
View1
...
this.router.navigate("view2").then(() => {
console.log("Publishing message");
this.eventAggregator.publish(new ShareDataMessage(dataToShare));
});
View2
...
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]
Очевидно, что s не был потоком выполнения, который я ожидал. Может кто-нибудь, пожалуйста, объясните мне, что мне не хватает?
Извините, мой последний комментарий был искажен. Какой браузер вы используете? –
@AshleyGrant проверен на Chrome 48 и Firefox 43 – Tinadm
EventAggregator полезен для развязки компонентов друг от друга, но IMHO лучше всего подходит для обмена данными между компонентами в одном и том же представлении. Для связи между представлениями я вместо этого храню данные в window.localStorage. –