์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ ๋ฒ ์๊ฐ์๋ Angular ์์ฒด์ ๋ด์ฅ๋์ด ์๋ Built-in Pipe์ ๋ํด์ ์์ ๋ณด์๋๋ฐ์.
(์์ง ์๋ณด์ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ด์ฃผ์ธ์!)
์ด๋ฒ์๋ ์ง์ Custom Pipe๋ฅผ ๋ง๋ค์ด์ ์ ์ฉํด ๋ณด๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
Pipe ์์ฑ
์๋ ๋ช ๋ น์ด๋ก Pipe๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
ng g p ํ์ดํ์ด๋ฆ
//๋ง์ฝ ํ
์คํธ ํ์ผ ์์ด ๋ง๋ค๊ณ ์ถ๋ค๋ฉด
ng g p --skip-tests=true ํ์ดํ์ด๋ฆ
์ ๋ ํ๊ท ๊ฐ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์์ด ๋ณด์ด๋๋ก ํ๋ AverageColorPipe๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์๋์ ๊ฐ์ด pipe.ts ํ์ผ์ด ๋ง๋ค์ด ์ง๊ฑฐ์์.
@Pipe({})๋ฅผ ํตํด์ '|' ๊ธฐํธ ๋ค์ ์ฌ์ฉํ ์ ์๋ pipe ์ด๋ฆ์ ์ ํด ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณค transform ๋ฉ์๋ ์์ ์ํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ด ๋์ค๊ฒ ์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค.
์ ๋ average๋ณด๋ค ์์ผ๋ฉด 'red' ๊ฐ์ผ๋ฉด 'blue' ํฌ๋ฉด 'green'์ด ๋์ค๋๋ก ํด์คฌ์ต๋๋ค.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'averageColor'
})
export class AverageColorPipe implements PipeTransform {
transform(value: number, average: number): string {
if (value < average) return 'red';
if (value == average) return 'blue';
return 'green';
}
}
app.module.ts
Pipe๋ฅผ ๋ช ๋ น์ด๋ก ๋ง๋ค๋ฉด app ๋ชจ๋์ ์๋์ผ๋ก ์ถ๊ฐ ๋์ง๋ง ํน์ ์๋์๋ ๋ถ๋ค์ ์ํด ์ ๋ฆฌ ํฉ๋๋ค.
์์ฑํด์ค pipe๋ฅผ import ํด์ฃผ์๊ณ @NgModule์ declarations์ ํด๋น Pipe๋ฅผ ์ถ๊ฐํด ์ค๋๋ค.
...
import { AverageColorPipe } from './average-color.pipe';
@NgModule({
declarations: [AppComponent, AverageColorPipe],
...
})
export class AppModule {}
app.component.ts
component์ ์ซ์๋ค์ด ๋ค์ด์๋ ๋ฐฐ์ด๊ณผ ํด๋น ๋ฐฐ์ด์ ์ด ํฉ์ ํ๊ท ์ ๊ตฌํด ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
average: number = 0;
numbers: number[] = [1, 2, 3, 4, 5, 6, 7];
ngOnInit(): void {
this.average =
this.numbers.reduce((acc, curr) => {
return acc + curr;
}) / this.numbers.length;
}
}
app.component.html
์ด์ ์์์ ์์ฑํด์ค averageColorํ์ดํ๋ฅผ ์ด์ฉํ์ฌ ์ซ์์ ๊ฐ์ ๋ฐ๋ผ ๊ธ์ ์์ด ๋ฐ๋๋๋ก ํ๋ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์ซ์ | averageColor:ํ๊ท ๊ฐ์ ๋ฃ์ด์ฃผ์๊ณ ngStyle์ ์ด์ฉํ์ฌ color ์์ pipe์ return ๊ฐ์ด ๋๋๋ก ํฉ๋๋ค.
<div *ngFor="let number of numbers">
<h1 [ngStyle]="{ color: (number | averageColor: average) }">
{{ number }}
</h1>
</div>
์ด๋ ๊ฒ ํ๋ฉด ํ๊ท ๊ฐ๋ณด๋ค ์์ ์ซ์๋ ๋นจ๊ฐ์์ผ๋ก ๊ฐ์ ๊ฐ์ ํ๋์์ผ๋ก ํฐ ๊ฐ์ ์ด๋ก์์ผ๋ก ๋ํ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค!
๋๊ธ