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
'source' 카테고리의 다른 글
| 닷넷 코어 시스템.Text.Json 이스케이프 해제 유니코드 문자열 (0) | 2023.03.18 |
|---|---|
| 스프링 부트 2.0.0M1 NoSch Method Error: org.springframework.boot.builder.Spring Application Builder. (0) | 2023.03.18 |
| 웹 팩, ES6, React를 사용하여 JavaScript 파일 및 호출 함수 ImportJS (0) | 2023.03.18 |
| mongoose를 통해 아이템을 mongo 어레이에 푸시합니다. (0) | 2023.03.18 |
| Javascript에서 안전한 OAuth2 소비를 구현하려면 어떻게 해야 합니까? (0) | 2023.03.18 |