1

我的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請讓我知道如何。謝謝。

回答

2

您需要在將被調用的函數中設置訂閱。也許增加一個attached回調並在那裏設置訂閱。確保處理訂閱,可能在detached回調。我現在正在使用手機,但是如果您需要代碼示例,請告訴我,當我回家時我會添加一個。

+0

非常感謝。我完全忘了'pageClicked()'從來沒有被調用過,'subscription'根本沒有被設置。 – akshayKhot

+0

沒問題。適合每個人。 –

+0

順便說一句,是'EventAggregator'是實現我在這裏要做的事情的首選方式嗎?還是有另一種方式來溝通不同的組件? – akshayKhot

相關問題