Pipe๋?
Angular ๊ณต์ ๋ฌธ์์๋ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์์ต๋๋ค.
์ง๋ ํ๋ฉด "ํด๋์ค๋ฅผ ํ์ดํ๋ก ํ์ํ๊ณ ๊ตฌ์ฑ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ์ฝ๋ ์ดํฐ" ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฒ ๋งํ๋ฉด ๋ฌด์จ ๋ง์ธ์ง ์ดํด๊ฐ ์๋์ฃ ?
์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง์ ๋๋ฆฌ๋ฉด HTML์์ ๋ฌธ์๋ ์ซ์๋ฅผ ์ํ๋ ๊ฒ์ ๋ง๊ฒ ๋ณํํ ๋ ์ฐ๋ ๊ฒ์ ๋๋ค.
์๋๋ Angular์์ built-in์ผ๋ก ์ ๊ณต๋๋ Pipe API List ์ธ๋ฐ์.
ํ๋์ฉ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
1. ๋ฌธ์ ํ์ดํ
๋จผ์ ๊ฐ์ฅ ์ฌ์ด ๊ฒ๋ถํฐ ๋ฌธ์๋ฅผ ๋ณํ์ํค๋ ํ์ดํ์ ๋๋ค.
UpperCasePipe,LowerCasePipe, TitleCasePipe ๋ฑ์ด ์๋๋ฐ ๋ง ๊ทธ๋๋ก ๋ฌธ์๋ฅผ ๋ณํ ์์ผ์ฃผ๋ ๊ฒ์ ๋๋ค.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ๋ด๊ณ ์ถ์ ๋ฌธ์๋ฅผ '|' ๊ฒ๊ณผ ํจ๊ป ํ์ดํ ์ด๋ฆ์ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค.
์ฐ์ tsํ์ผ์ ์๋์ ๊ฐ์ด name์ ์ ํด์ฃผ์๊ณ (์ค ํฐ์คํ ๋ฆฌ์ TypeScript๋ ์ด์ ์ง์๋๋ค)
name: string = 'Fomagran';
HTML ํ๊ทธ์ ์ ์ฉํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
<div>{{ name | uppercase }}</div>
<div>{{ name | lowercase }}</div>
<div>{{ name | titlecase }}</div>
๊ทธ๋ผ ์๋์ ๊ฐ์ด ๋ฌธ์๊ฐ ๋ณํ๋ผ์ ๋ํ๋๊ฒ ๋ฉ๋๋ค.
2. ์ซ์ ํ์ดํ
๊ทธ ๋ค์์ผ๋ก ์ซ์์ ๊ด๋ จ๋ ํ์ดํ๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ์์์ ์ด ์๋ ์ซ์๋ฅผ ์ํ๋ ํ์์ ๋ง๊ฒ ๋ํ๋ด๊ณ ์ถ๋ค๋ฉด DecimalPipe๋ฅผ ์ด์ฉํ๋ฉด ๋๋๋ฐ์.
tsํ์ผ์ pi๋ฅผ ๋ํ๋ด๋ ์ซ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ
pi: number = 3.14159265359;
HTML ํ๊ทธ์ number ํ์ดํ๋ฅผ ์ ์ฉํด ์ค๋๋ค.
<div>{{ pi | number }}</div>
<div>{{ pi | number: "1.4-5" }}</div>
๊ทธ๋ฅ number๋ง ์ฌ์ฉํ์์ ๊ฒฝ์ฐ default๊ฐ ์์์ 3์๋ฆฌ๊น์ง ๋ํ๋๊ณ , ์ ์์ธ ๋ถ๋ถ x. ์์์ธ ๋ถ๋ถ์ ๊ธธ์ด n~m๊น์ง๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
3. ๊ธฐํธ ํ์ดํ
ํํ์ ๋จ์๋ฅผ ๋ค์ ๋ถ์ผ ์๋ ์๊ณ ํผ์ผํธ๋ฅผ ํ์ํ ์๋ ์๋๋ฐ์.
tsํ์ผ์ percent์ money๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
percent: number = 0.259;
money: number = 0.35;
HTML ํ๊ทธ์ ์๋์ ๊ฐ์ด ์ ์ฉํด ์ค๋๋ค.
<div>{{ percent | percent }}</div>
<div>{{ percent | percent: "2.3" }}</div>
<div>{{ money | currency }}</div>
<div>{{ money | currency: "KRW":"symbol":"1.2" }}</div>
์ DecimalPipe์์ ์ฌ์ฉํ ์ ์ ๋ฐ ์์์ ์ ๋ํ๋ด๋ ๋ฐฉ๋ฒ๋ ๋๊ฐ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
4. ๋ ์ง ํ์ดํ
DatePipe๋ฅผ ์ด์ฉํด์ ๋ ์ง ํ์์ ๋ง๊ฒ ๋ํ๋ผ ์๋ ์์ต๋๋ค.
tsํ์ผ์ ํ์ฌ date๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
date: number = Date.now();
HTMLํ๊ทธ์ ์๋์ ๊ฐ์ด ์ ์ฉํด ์ค๋๋ค.
<div>{{ date | date: "medium" }}</div>
<div>{{ date | date: "YYYY/MM/dd" }}</div>
Angular์์ ์ด๋ฏธ ๋ง๋ค์ด ๋์ short, medium, long์ ์ฌ์ฉํ ์๋ ์๊ณ
(์ฌ๊ธฐ ๊ฐ์๋ฉด ๋ ์์ธํ ํ์ธํ ์ ์์ต๋๋ค.)
์๋ ์ฌ์ฉํ๋๋๋ก YYYY/MM/dd์ ๊ฐ์ ํ์์ผ๋ก๋ ๋ฐ๊ฟ ์ ์์ต๋๋ค.
5. ๊ฐ์ฒด ํ์ดํ
tsํ์ผ์ object์ json๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ jsonObject๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
object: { [key: number]: string } = { 1: 'one', 2: 'two', 3: 'three' };
jsonObject: Object = {
foo: 'bar',
baz: 'qux',
nested: { xyz: 3, numbers: [1, 2, 3, 4, 5] },
};
์๋์ ๊ฐ์ด HTMLํ๊ทธ์ ์ ์ฉํด ์ค๋๋ค.
<div *ngFor="let item of object | keyvalue">
{{ item.key }}. {{ item.value }}
</div>
<div>
<pre>{{ jsonObject | json }}</pre>
</div>
์๋์ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ ํค,๋ฐธ๋ฅ ๊ฐ์ ๋ง๊ฒ ์ํ๋ ํํ๋ก ๋ํ๋ผ ์๋ ์๊ณ , JSON ํ์์ฒ๋ผ ๋ณด์ด๊ฒ ๋ํ๋ผ ์๋ ์์ต๋๋ค.
6. ๋ฐฐ์ด ํ์ดํ
slice๋ฅผ ์ด์ฉํด์ ๋ฐฐ์ด์ ์๋ผ์ ๋ณด์ฌ์ค ์๋ ์์ต๋๋ค.
tsํ์ผ์ ์๋์ ๊ฐ์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ์ฃผ๊ณ ,
array: number[] = [1, 2, 3, 4, 5, 6, 7];
HTML ํ๊ทธ์ slice๋ฅผ ์ ์ฉํด ์ค๋๋ค.
<div>{{ array | slice: 0:4 }}</div>
<div>{{ array | slice: -2 }}</div>
์๋์ ๊ฐ์ด slice๊ฐ ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
7. ๋น๋๊ธฐ ํ์ดํ
๋ง์ง๋ง์ผ๋ก ๋์ค์ ๋ฐ๋๊ฒ ๋๋ ๋น๋๊ธฐ ํ์ดํ์ ๋ํด์ ์์ ๋ณด๊ฒ ์ต๋๋ค.
tsํ์ผ์ 1์ด์ ํ๋ฒ์ฉ ๋ฐ๋๋๋ก ํ๋ Observable์ ๋ง๋ค์ด ์ค๋๋ค.
time = new Observable<string>((observer: Observer<string>) => {
setInterval(() => observer.next(new Date().toString()), 1000);
});
HTML ํ๊ทธ์ asyncํ์ดํ๋ฅผ ์ ์ฉํด ์ค๋๋ค.
<div>Time: {{ time | async }}</div>
์๋์ ๊ฐ์ด ์ด์ ๋ฐ๋ผ ์ ๋ฐ์ดํธ ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ค๋์ ์ด๋ ๊ฒ ์ง์ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์๊ณ ๋ ํธ๋ฆฌํ๊ฒ HTML์์ ์ํ๋ ํํ๋ก ๋ณํํ์ฌ ๋ํ๋ผ ์ ์๋ ํ์ดํ์ ๋ํด ์์ ๋ณด์์ต๋๋ค.
๋๋ถ์ ์ด์ ํธํ๊ฒ HTML์์ ์ํ๋ ๋ฌธ์๋ ์ซ์๋ฅผ ํํํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ ๊ฐ ์ ๋ฆฌํ ๊ฒ ์ธ์๋ ๋ ๋ค์ํ ํ์ดํ๋ค์ด ์์ผ๋ ๊ถ๊ธํ์ ๋ถ๋ค์ ๊ณต์ Angular ํํ์ด์ง์์ ํ์ธํ์๋ฉด ๋ฉ๋๋ค.
ํน์๋ผ๋ ํ๋ฆฐ ์ ์ด ์๊ฑฐ๋ ๊ถ๊ธํ์ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
Reference
๋๊ธ