我試圖建立angular2申請生產對於我跟隨此blog。我NGC編譯成功後,當TSC編譯需要把它產生如下圖所示的錯誤:住宅「X」是私有的,只有類中訪問「xyzComponent」
搜索一段時間後,我發現這個blog這說明了問題「的上下文屬性「部分,我無法正確理解可能會給你一些好主意,發生了什麼問題。 基本上,當我們正在製作一個可變的私人我們得到「錯誤:屬性是私人的,只能在類內訪問」。我不明白爲什麼會來。
請好心幫助我們,因爲過去幾天我們在這個問題上一直耿耿於懷。
我試圖建立angular2申請生產對於我跟隨此blog。我NGC編譯成功後,當TSC編譯需要把它產生如下圖所示的錯誤:住宅「X」是私有的,只有類中訪問「xyzComponent」
搜索一段時間後,我發現這個blog這說明了問題「的上下文屬性「部分,我無法正確理解可能會給你一些好主意,發生了什麼問題。 基本上,當我們正在製作一個可變的私人我們得到「錯誤:屬性是私人的,只能在類內訪問」。我不明白爲什麼會來。
請好心幫助我們,因爲過去幾天我們在這個問題上一直耿耿於懷。
對於給定的組件,其模板訪問的所有成員(方法,屬性)必須在AOT編譯方案中公開。這是由於模板轉變爲TS類的事實。生成的類和組件現在是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提供我一些幫助,所以感謝名單爲。
不需要使用'_name',它可以和你使用'this.'和其他'name'相同,它是一個局部變量'this.name = name;'' – LazerBanana
您是否曾嘗試將財產從私人更改爲公共? –
你可以請分享ts文件內容是拋出錯誤嗎? –