我的Aurelia應用程序中有一個父 - 子組件體系結構。 Panel
是一個父組件視圖模型,其中有一個Tool
組件。Aurelia EventAggregator不訂閱
我在Panel
上有一個分頁界面,點擊Tool
應該更新。問題是,跟蹤哪個頁碼被點擊的變量,pageNumber
僅在panel.ts
中可用,在tool.ts
中不可用。所以基本上,這是兩個ViewModel之間通信的問題。
要解決此問題,我正在使用Aurelia的EventAggregator
,下面的this優秀教程。以下是我寫至今:
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
請讓我知道如何。謝謝。
非常感謝。我完全忘了'pageClicked()'從來沒有被調用過,'subscription'根本沒有被設置。 – akshayKhot
沒問題。適合每個人。 –
順便說一句,是'EventAggregator'是實現我在這裏要做的事情的首選方式嗎?還是有另一種方式來溝通不同的組件? – akshayKhot