1

我正在創建一個擴展類HttpClient,然後將this關鍵字擴展爲includeEventsIn函數,includeEventsIn將擴展BaseService和EventAggregator類型,請參閱代碼here如何通過Typescript中的「this」關鍵字包含類定義?

問題

  • 我怎麼能包括BaseServiceEventAggregator方法和道具與HttpClient的相處?
  • 什麼是另一種擴展類(BaseService)與兩個類的方法?

這是代碼。

@transient() 
export class BaseService extends HttpClient { 
    constructor() { 
     super(); 
     includeEventsIn(this); 
    } 
} 
+1

你必須在'BaseClass'中注入'EventAggreator'。然而,我認爲如果你在'BaseClass'中注入'HttpClient'和'EventAggregator',而不使用繼承,那麼它會更有意義。 –

+0

EventAggregator和HttpClient的方法和屬性不能用於基類。我不想注入它,因爲它需要手動實現它的所有屬性和方法 – janmvtrinidad

回答

2

時建立應用程式奧裏利亞除非絕對必要,你不應該使用繼承(我會認爲這是從來沒有必要)。青睞繼承。

例如,在你的情況,我會Service(不BaseService,因爲你將不再使用繼承)承擔HttpClientEventAggregator的依賴。我懷疑你真的需要通過致電includeEventsIn增加的所有功能。這就是說,如果你確實需要它,那麼你可以簡單地將這三個函數添加到Service

import {inject, EventAggregator} from 'aurelia-framework'; 
import {HttpClient} from 'aurelia-fetch-client'; 

@inject(HttpClient, EventAggregator) 
export class Service { 
    constructor(http, ea) { 
    this.http = http; 
    this.ea = ea; 
    } 
} 

然後,您可以在實現所需的任何功能後,根據需要將此類注入到另一個類中。

+0

它是有道理的。但是爲了這個問題,在使用includeEventsIn時,typecript是否可以通過這個關鍵字來擴展類定義(道具和方法)? – janmvtrinidad

+0

我會看看創建一個裝飾器來做到這一點。 'includeEventsIn'是一種混合類型的東西。 –

+0

我同意你Ashley Saiyaman! –