2017-03-31 32 views
9

我試圖建立angular2申請生產對於我跟隨此blog。我NGC編譯成功後,當TSC編譯需要把它產生如下圖所示的錯誤:住宅「X」是私有的,只有類中訪問「xyzComponent」

enter image description here

搜索一段時間後,我發現這個blog這說明了問題「的上下文屬性「部分,我無法正確理解可能會給你一些好主意,發生了什麼問題。 基本上,當我們正在製作一個可變的私人我們得到「錯誤:屬性是私人的,只能在類內訪問」。我不明白爲什麼會來。

請好心幫助我們,因爲過去幾天我們在這個問題上一直耿耿於懷。

+0

您是否曾嘗試將財產從私人更改爲公共? –

+0

你可以請分享ts文件內容是拋出錯誤嗎? –

回答

20

對於給定的組件,其模板訪問的所有成員(方法,屬性)必須在AOT編譯方案中公開。這是由於模板轉變爲TS類的事實。生成的類和組件現在是2個獨立的類,您不能訪問私有成員跨類。

簡而言之:如果您想使用提前編譯,則無法訪問模板中的私有成員。

爲了更好的解釋https://github.com/angular/angular/issues/11422

2

所以我固定的這個問題,我會記住這簡短。爲了解決這個問題,我深深地讀了這個blog。正如在「上下文屬性」這個問題的解決方案是,如果你想在視圖中直接使用它,當你使用AOT創建你的版本時,不要使用或創建一個私有變量(即,時間)生產。

*例如*

// component.ts 
@Component({ 
    selector: 'third-party', 
    template: ` 
    {{ _initials }} 
    ` 
}) 
class ThirdPartyComponent { 
    private _initials: string; 
    private _name: string; 

    @Input() 
    set name(name: string) { 
    if (name) { 
     this._initials = name.split(' ').map(n => n[0]).join('. ') + '.'; 
     this._name = name; 
    } 
    } 
} 

輸出: 住宅 '_initials' 是私有的,只有類中訪問 'ThirdPartyComponent'。

解決方案:

更新此private _initials: string;簡單_initials: string;

對於這個答案Harish Gadiya提供我一些幫助,所以感謝名單爲。

+0

不需要使用'_name',它可以和你使用'this.'和其他'name'相同,它是一個局部變量'this.name = name;'' – LazerBanana