2017-03-31 3 views
9

blog을 따르고 있습니다. 에 대한 angular2 애플리케이션을 작성하려고합니다. 내 NGC 성공적으로 컴파일 후 TSC 컴파일 걸리는 경우 배치는 그림과 오류 아래 생성는 "내가 에 문제를 설명하고이 blog을 발견'X'속성은 비공개이며 'xyzComponent'클래스에서만 액세스 할 수 있습니다.

enter image description here

잠시 동안 검색 한 후 컨텍스트 속성 " 섹션에서 제대로 이해할 수 없다는 것은 잘못된 생각이 들었을 수도 있습니다. 기본적으로 변수를 비공개로 설정할 때 "속성 : 속성이 비공개이며 클래스 내에 만 액세스 할 수 있습니다". 나는 왜 그것이 오는지 이해하지 못합니다.

지난 며칠 동안이 문제에 대한 우리의 머리를 쾅쾅 대고있는 것처럼 우리를 도우십시오.

+0

개인을 공개로 변경하려고 했습니까? –

+0

오류를 던지고있는 파일 내용을 공유 할 수 있습니까? –

답변

20

주어진 구성 요소의 경우 해당 템플리트에서 액세스하는 모든 구성원 (메소드, 특성)은 AOT 컴파일 시나리오에서 공용이어야합니다. 이것은 템플릿이 TS 클래스로 바뀌었기 때문입니다. 생성 된 클래스와 구성 요소는 이제 2 개의 개별 클래스로, 클래스 간 개인 멤버는 액세스 할 수 없습니다.

간단히 말해서 미리 컴파일을 사용하려는 경우 템플릿의 개인 멤버에 액세스 할 수 없습니다. 더 나은 explaination https://github.com/angular/angular/issues/11422

2

를 들어

그래서 나는이 짧고 간단하겠습니다이 문제를 해결했습니다. 이것을 고치기 위해 나는 blog을 깊이 읽었습니다. "컨텍스트 속성"에서와 같이이 문제의 해결책은 입니다. AOT ()로 빌드를 만들 때보기에서 직접 사용하려면 개인 변수를 사용하거나 만들지 마십시오 Of)를 생산합니다. 예를 들어

* *

// 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;이 답변 Harish Gadiya를 들어

_initials: string; 단지에 나에게 그것을위한 고맙습니다 있도록 도움을 제공

업데이트합니다.

+0

은'_name'을 사용하지 않아도됩니다.'this.'와 다른'name'을 사용하는 것과 같을 수 있습니다. 로컬 변수'this.name = name;' – LazerBanana