템플릿은 컴포넌트의 뷰를 구성하는 정보이다.
DOM에 직접 접근하여 데이터를 노출시키거나 뷰의 상태를 가져와 일련의 로직을 처리하는 등 일일이 수행하여햐야 하는 명령을 기술하는 방식 → 바닐라 js로 기술하는 방식이다.
let button = document.querySelector("#btn_start");
// ...
컴포넌트와 뷰사이에 연결고리를 만드는 방식 즉, 템플릿안에 컴포넌트와 뷰의 관계를 선언한다.
import { Component } from '@angular/core';
@Component({
selector: 'hello-angular',
template:`
<button id="btn_start" (click)="handleClick">start</button>
<p ngIf="isStarted">보인다!</p>
`
})
export calss HelloAngularComponent {
isStarted: boolean = false;
handleClick() {
this.isStarted = true;
}
}
데이터 바인딩이란 선언적 방식으로 프로그래밍을 하기위한 구체적인 방법이다.
단방향 바인딩 : 삽입식 {{}}
, 프로퍼티식[]
이벤트 바인딩: ()
양방향 바인딩: [()]
삽입식
{{}}
<div>{{ contents }}</div>
<h1>{{ getLogo() }}</h1>
<a href="{{ someLink + 'lalala'}}"></a>
<p>1 + value = {{ 1 + value }}</p>
삽입식에 복잡한 연산 또는 값을 할당하는 표현식은 작성하면 안된다.
뷰에 바인딩된 결과가 화면에 반영되는 데 심각한 영향을 끼치지 때문이다.
프로퍼티 바인딩
컴포넌트에 DOM의 프로퍼티 값을 바인딩 한다.
[DOM 프로퍼티]="템플릿 표현식"
<p [textContent]="content"></p>
<img [src]="./test.img" [width]="10*20">
<img [src]="./test.img" width="128">
이벤트 바인딩
(이벤트 대상) = "템플릿 문장"
<button type="button" (click)="confirm()"></button>
<div (mousemove)="printPosition($event)"></div>
<input type="text" (keyup)="myStr = $event.target.value" />
<button type="button" (click)="clicekd = true; callEvent($event)"></button>
<div *ngIf="boolean"></div>
const animals = ['Dog', 'Cat', 'Deer'];
<ul>
<li *ngFor="let animal of animals; let idx = index"></li>
</ul>
<span [ngSwitch]="animal">
<span *ngSwitchCase='Dog'">멍멍</span>
<span *ngSwitchCase='Cat'">야옹</span>
<span *ngSwitchCase='Cock'">꼬끼오</span>
<span *ngSwitchDefault>어험!</span>
</span>
불필요한 코드를 추가하지 않는 요소
ng-container
<ng-container *ngIf="boolean"></ng-container>
// 두개 이상의 구조 디렉티브 사용 예시
<ng-container *ngFor="let item of items">
<div *ngIf="item.id">
{{item.name}}
</div>
</ng-container>
ng-template
<ng-template [ngIf]"boolean"></ng-template>
ngTemplateOutlet
<ng-container *ngTemplateOutlet="template"></ng-container>
<ng-template #template> Hello!</ng-template>
<div>
HEADER
<ng-container *ngTemplateOulet="logo"></ng-container>
</div>
<div>
MAIN
<ng-container *ngTemplateOulet="logo"></ng-container>
</div>
<div>
FOOOTER
<ng-container *ngTemplateOulet="logo"></ng-container>
</div>
<ng-template #logo>
<img [src]="logoImage">
</ng-template>
참고: https://medium.com/sjk5766/ng-template과-ng-container-fb913ff1984d
|
)를 표시한후 앵귤러에서 기본적으로 제공하는 파이프 API나 커스텀 파이프를 나열해준다.<p name="member-name">{{ myName | uppercase | honor }}</p>
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'honor' })
export class HonorPipe implements PipeTransform {
transform(value: string): string {
return `${value} 님`
}
}
파이프에서 추가로 인자를 받아 , 인자에 따라 변형 로직을 바꿀수 있다
<p name="member-name">{{ myName | uppercase | honor:'red' }}</p>
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({ name: 'honor' })
export class HonorPipe implements PipeTransform {
transform(value: string, color: string): string {
switch (color) {
case: 'red':
return `빨간색을 좋아하는 ${value}님`;
case: 'blue':
return `파란색을 좋아하는 ${value}님`;
}
}
}
위 포스팅은 앵귤러 첫걸음(조우진) 책의 내용을 학습 목적을 위해 요약 정리한 내용 입니다.