2016-10-31 108 views
1

場所我有一個基類:角2繼承超級()注射的WebPack

import {DomSanitizer} from '@angular/platform-browser'; 

export class Base { 
    constructor(protected sanitizer: DomSanitizer){ 
    } 

    //.....lots more stuff 
} 

此類由下列派生類擴展:

import {DomSanitizer} from '@angular/platform-browser'; 

export class ChildClass extends Base{ 
    constructor(protected sanitizer: DomSanitizer) { 
     super(sanitizer); 
    } 
} 

我的模塊被導入BrowserModule

我使用的WebPack編譯和我在運行時收到以下錯誤:

Uncaught ReferenceError: platform_browser_1 is not defined -- app.bundle.js:58139

app.bundle.js是的WebPack輸出,我可以在編譯源確實platform_browser_1不可用內看到那塊。

我不會以任何有目的的方式分裂我的應用程序。有什麼我不知道如何繼承可能會導致Webpack錯誤地不導入所需的類或什麼?

這絕對是一個Webpack問題,因爲如果我刪除DomSanitizer的基於繼承的usave,並直接將它放入子組件中,它就可以正常工作。

爲了澄清,platform-browser是從中導入DomSanitizer的模塊。

有沒有人有任何想法是怎麼回事? 任何幫助表示讚賞。

+0

您的代碼沒有針對Base的導入,無法解釋發生了什麼(該問題與繼承或超級無關)。這也意味着實際的代碼與您展示的代碼不同。 Webpack配置和塊沒有任何已知的信息。一個可行的搶劫者可能可以幫助。 – estus

+0

是的,試圖去除噪音。基類被導入(否則你會得到一個不同的錯誤)。我會嘗試添加更多... – dudewad

回答

0

好吧,所以基本上,我嘗試了很多東西,看看如何讓Webpack輸出正確的代碼。我注意到Webpack會和其他模塊一起在傳輸塊中輸出一個變量: var platform_browser_1 = ...

但是,在我的基類的塊中,根本沒有輸出它。所以,我認爲一定有一個理由忽略它。由於這些塊被註釋了,我認爲可能向基類添加一個@Component註解是可行的,而且它也可以。所以,我去的:

export class Base { ....

要:

@Component({}) //empty component decorator 
export class Base { 
    //.... 
} 

問題解決了,不管是什麼原因。不幸的是,我沒有解釋爲什麼,但是如果任何人想要調查,可能是因爲@Component根據我對NG文檔網站的研究提供元數據。

希望這可以幫助別人!