source

Angular 구성요소의 "개인" 및 "공개"

itover 2023. 3. 18. 08:32
반응형

Angular 구성요소의 "개인" 및 "공개"

이전에 개인 정보를 추가하지 않으면foo,loadBar,그리고.text디폴트로는 공개되어 있다고 생각합니다.

export class RandomComponent {
  @Input() foo: string;
  @Output() loadBar = new EventEmitter();
  text: string;
}

이 경우 사용 사례가 있습니까?public컴포넌트 안에 있습니까?

캡슐화/보안상의 이유로 항상 추가되어야 합니까?private아래처럼 모든 것을 위해?

export class RandomComponent {
  @Input() private foo: string;
  @Output() private loadBar = new EventEmitter();
  private text: string;
}

감사해요.

이 질문에 대해 할 말이 많습니다.제 머릿속에 떠오른 첫 번째 생각은 다음과 같습니다.

무엇보다도, 명심하세요private는 컴파일 시간 구성일 뿐 런타임에는 적용할 수 없습니다(관련 설명은 여기를 참조).에 대한 어떤 개념도 무시해 주세요.private보안 목적으로 어떤 식으로든 유용하게 쓰입니다.그런 뜻이 아니야.

이것은 캡슐화에 관한 것입니다.컴포넌트에 캡슐화할 필드 또는 메서드가 있는 경우, 다른 곳에서 접근해서는 안 된다는 것을 명확히 하기 위해 반드시 컴포넌트를 작성해야 합니다.private: 그렇습니다.private용도는 다음과 같습니다.어떤 옷을 입었든 교실 밖에서 만지면 안 된다는 당신의 의도를 나타냅니다.

에 대해서도 마찬가지다.public: 이것도 컴파일 타임만의 구성이기 때문에 클래스 멤버가public기본적으로는 true이지만 실행 시 의미는 정확히 0입니다.단, 클래스 API의 일부로 외부에 공개하고자 하는 멤버가 있다면 반드시 작성해야 합니다.public이 의도를 나타내기 위해:그렇구나public를 위한 것입니다.

이 모든 것은 일반적으로 타입스크립트에 적용됩니다.특히 Angular에서는 컴포넌트 클래스에 퍼블릭멤버를 배치하기 위한 유효한 사용 사례가 분명히 있습니다.를 들어, 컨테이너/컴포넌트(일명 스마트/) 패턴을 구현할 때 컨스트럭터 주입을 통해 "똑똑한" 부모를 주입하는 "덤" 자녀는 부모 구성원에 대해 무엇을 만져야 하는지, 무엇을 만져서는 안 되는지에 대한 의사를 전달하는 것이 매우 중요합니다.그렇지 않으면, 부모님 술장 안에서 빈둥거리는 멍청한 아이들을 발견해도 놀라지 마세요.

그래서, 당신의 질문에 대한 나의 대답은:

항상 아래와 같이 개인 정보를 추가해야 합니까?

단호히 거절합니다.항상 추가해서는 안 됩니다.private이렇게 하면 키워드의 목적이 무너지기 때문입니다.왜냐하면 키워드를 어디에 두어도 더 이상 의도를 나타내지 않기 때문입니다.이치노릇을 하다

@private/public은 의도로 요약된다는 점에서 좋은 답을 제공한다.그러나 주입된 개인 값을 사용할 때 고려해야 할 사항이 몇 가지 더 있습니다.

  • 를 사용하는 경우 typescript(noUnusedLocals)와 tslint(no-unused-variable) 모두 오류를 보고합니다.@Import() private foo , 「」constructor(private foo) {} 「」만을 합니다.foo
  • AOT가 작동하지 않음:

AoT 컴파일 프로세스의 출력으로 TypeScript를 내보내려면 컴포넌트 템플릿의 퍼블릭필드에만 액세스해야 합니다**

언급URL : https://stackoverflow.com/questions/37506343/private-and-public-in-angular-component

반응형