본문 바로가기
Frontend/Angular

[Angular] 03. Dynamic interface with templates

by jyc_ 2025. 1. 31.
 Angular 공식 문서를 실습하고 정리하는 글입니다.

 

동적 텍스트 표시

  • Binding은 컴포넌트와 템플릿과 데이터 간의 동적 연결을 생성한다.
  • 이 연결은 컴포넌트 데이터가 변경되면 자동으로 렌더링된 템플릿을 업데이트한다.

 

이중 중괄호 {{ }} 를 사용하여 바인딩을 생성할 수 있다.

@Component({
  selector: 'user-profile',
  template: `<h1>Profile for {{userName()}}</h1>`,
})
export class TodoListItem {
  userName = signal('pro_programmer_123');
}
  • 출력: <h1>Profile for pro_programmer_123</h1>
  • {{ userName() }} 은 userName 시그널의 값 ‘pro_programmer_123’으로 대체된다.
  • userName 시그널의 값이 변경되면, 앵귤러는 바인딩을 자동으로 업데이트한다.

 

동적 속성 및 속성 설정

앵귤러는 [ ] 를 사용하여 DOM 요소의 동적 속성을 바인딩할 수 있다.

@Component({
  template: `<button [disabled]="isValidUserId()">Save changes</button>`,
})
export class UserProfile {
  isValidUserId = signal(false);
}
  • isValidUserId 시그널 값이 false 이므로, 버튼이 활성화된다.
  • usValidUserId 시그널 값이 변경되면, 버튼의 disabled 속성도 자동으로 업데이트된다.

 

HTML 속성을 바인딩하려면 attr. 접두사를 사용한다.

<ul [attr.role]="listRole()">
  • listRole 시그널의 값이 ul 요소의 role 어트리뷰트로 설정된다.

 

사용자 상호작용 처리

앵귤러는 템플릿에서 요소에 이벤트 리스너를 추가할 수 있도록 ( ) 를 제공한다.

@Component({
  template: `<button (click)="cancelSubscription($event)">Cancel subscription</button>`,
})
export class UserProfile {
  cancelSubscription(event: Event) { /* 이벤트 처리 */ }
}
  • 버튼을 클릭하면 $evnet 객체가 cancelSubscription 메서드로 전달된다.

 

@if, @for 를 사용한 제어 흐름

  • 앵귤러는 템플릿의 일부를 조건에 따라 표시하거나 숨기기 위해 @if 블록을 제공한다.
  • @else 블록을 사용하여 조건부 렌더링을 확장할 수도 있다.
<h1>User profile</h1>
@if (isAdmin()) {
  <h2>Admin settings</h2>
  <!-- ... -->
} @else {
  <h2>User settings</h2>
  <!-- ... -->  
}

 

 

@for 블록을 이용해 템플릿의 일부를 반복할 수 있다.

<h1>User profile</h1>
<ul class="user-badge-list">
  @for (badge of badges(); track badge.id) {
    <li class="user-badge">{{badge.name}}</li>
  }
</ul>

 

'Frontend > Angular' 카테고리의 다른 글

[Angular] 05. Components: Selectors  (1) 2025.01.31
[Angular] 04. Dependency Injection  (0) 2025.01.31
[Angular] 02. Signal  (0) 2025.01.31
[Angular] 01. Component  (2) 2025.01.31
[Angular] 00. 사전 준비, Angular 설치  (0) 2025.01.28