ng-container의 활용법
중첩 조건부 렌더링
복잡한 조건 로직은 Angular 템플릿에서 흔히 발생합니다.
ng-container를 사용하면 이러한 조건을 깔끔하게 처리할 수 있습니다.
<ng-container *ngIf="isLoggedIn">
<ng-container *ngIf="isAdmin">
<p>관리자 권한이 있습니다.</p>
</ng-container>
<ng-container *ngIf="!isAdmin">
<p>일반 사용자 권한이 있습니다.</p>
</ng-container>
</ng-container>
설명
- 로그인 상태에 따라 내부 조건이 결정됩니다.
- 중첩 구조에서도 불필요한 DOM 요소를 방지합니다.
동적 콘텐츠 렌더링
동적으로 바뀌는 UI 구성 요소를 효율적으로 관리할 수 있습니다.
<ng-container *ngIf="contentType === 'text'">
<p>텍스트 콘텐츠가 표시됩니다.</p>
</ng-container>
<ng-container *ngIf="contentType === 'image'">
<img src="image.jpg" alt="이미지 콘텐츠">
</ng-container>
<ng-container *ngIf="contentType === 'video'">
<video controls>
<source src="video.mp4" type="video/mp4">
</video>
</ng-container>
export class AppComponent {
contentType: string = 'text'; // text, image, video 중 하나
}
contentType 값에 따라 적절한 콘텐츠가 표시됩니다.
구조적 지시자 결합
ng-container는 여러 구조적 지시자를 결합하여 복잡한 조건과 반복을 함께 처리할 수 있습니다.
<ng-container *ngFor="let item of items">
<ng-container *ngIf="item.isActive">
<p>{{ item.name }} (활성)</p>
</ng-container>
</ng-container>
export class AppComponent {
items = [
{ name: 'Item 1', isActive: true },
{ name: 'Item 2', isActive: false },
{ name: 'Item 3', isActive: true },
];
}
// 출력 결과
Item 1 (활성)
Item 3 (활성)
실무 팁
템플릿 가독성 향상
복잡한 템플릿에서는 ng-container를 사용하여 UI 로직을 명확하게 분리할 수 있습니다.
잘못된 예제
<div *ngIf="isLoggedIn">
<div *ngIf="hasNotifications">
<p>새로운 알림이 있습니다!</p>
</div>
</div>
개선된 예제
<ng-container *ngIf="isLoggedIn">
<ng-container *ngIf="hasNotifications">
<p>새로운 알림이 있습니다!</p>
</ng-container>
</ng-container>
템플릿 구조가 더 간결해지고, 시각적으로 가독성이 높아집니다.
성능 최적화
ng-container는 DOM 요소를 생성하지 않으므로 렌더링 성능에 긍정적인 영향을 미칩니다.
실무 사례
다양한 데이터가 반복 렌더링되는 상황에서 ng-container를 사용하면 DOM 노드의 깊이를 줄여 브라우저의 렌더링 비용을 줄일 수 있습니다.
'개발 공부 > Angular' 카테고리의 다른 글
| ng-template / Angular (2) (0) | 2024.12.08 |
|---|---|
| ng-template / Angular (1) (0) | 2024.12.05 |
| ng-container / Angular (1) (1) | 2024.12.01 |
| Query Parameters / Angular (1) | 2024.11.26 |
| Angular Router Guards (1) | 2024.11.24 |