Aurelia EventAggregator не подписывается
В моем приложении Aurelia есть компонентно-родительская архитектура компонентов. Panel
Родительский компонент View-модель, внутри которой находится Tool
составная часть.
У меня есть интерфейс для нумерации страниц Panel
, нажав на который Tool
должен обновить. Проблема в том, что переменная, которая отслеживает, какой номер страницы был нажат, pageNumber
доступно только в panel.ts
и недоступно в tool.ts
, Таким образом, в основном, это проблема связи между двумя моделями представления.
Чтобы решить эту проблему, я использую Aurelia's EventAggregator
следуя этому превосходному учебнику. Вот что я написал до сих пор:
panel.html
<a class="page-link" click.delegate="pageClick(1)"> 1 </a>
panel.ts
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Panel {
eventAggregator: EventAggregator;
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
pageClick(pageNumber) {
var pageInfo = {
pageNumber: pageNumber
}
this.eventAggregator.publish("pageClicked", pageInfo);
}
tool.ts
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Tool {
eventAggregator: EventAggregator;
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
pageClicked() {
this.eventAggregator.subscribe("pageClicked",
pageInfo => {
console.log(`${pageInfo.pageNumber} was clicked`);
});
}
Это работает нормально, пока событие не будет запущено. Я попробовал отладку и увидел, что eventAggregator
уволил pageClicked
событие. Но точка останова на subscribe
никогда не был поражен. Каким-то образом subscribe
метод не срабатывает. Что мне здесь не хватает?
Моя первоначальная мысль заключается в том, что EventAggregator
экземпляр отличается, но я не уверен, должен ли он быть таким же. Любая помощь приветствуется. Кроме того, если вы знаете какой-то другой лучший способ достичь intercomponent communication
пожалуйста, дайте мне знать, как. Благодарю.
1 ответ
Вам необходимо настроить подписку в функции, которая будет вызываться. Может быть, добавить attached
Обратный звонок и настроить подписку там. Убедитесь, что вы удалили подписку, вероятно, в detached
Перезвоните. Я сейчас на мобильном телефоне, но если вам нужен пример кода, дайте мне знать, и я добавлю его, когда вернусь домой.