πŸ’» Frontend/Angular

[Angular] Pipeλž€? (feat. Built-in Pipe)

Fomagran πŸ’» 2022. 5. 24. 23:47
728x90
λ°˜μ‘ν˜•

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

 

728x90
λ°˜μ‘ν˜•