티스토리 뷰
1. 이 포스트는 Pipe를 생성하는 방법에 대한 내용이다.
2. 개발 방법
2-1 pipe 추가
2-2 app.module.ts에 추가
2-3 pipe.ts 작성
2-4 사용하기
3. Pipe추가하기
3-1 아래처럼 추가하면 convert.pipe.ts파일이 생성되고 내부에 클래스 template이 만들어 진다.
$ ng generate pipe convert
3-2 기본적으로 만들어지는 template은 다음과 같다
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'convert'
})
export class ConvertPipe implements PipeTransform {
transform(value: unknown, ...args: unknown[]): unknown {
return null;
}
}
4. app.module.ts에 추가하기
4-1 pipe를 사용하려면 사용할 module내에 다른 컴포넌트와 동일하게 선언을 해주어야 한다.
4-2 3항에서 설명했던 방식으로 파이프를 생성하면 자동으로 declarations에 포함된다.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { ConvertPipe } from './convert.pipe';
@NgModule({
declarations: [
AppComponent,
ConvertPipe
],
imports: [
BrowserModule,
NgbModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
5. 파이프 작성
5-1 mile을 km으로 변환하는 간단한 파이프이다.
5-2 unit을 option으로 받고 있는데 설정한 옵션에 따라서 결과 값이 달라진다.
5-2-1 포멧은 miles | convert: 'km' 방식으로 지정되어 miles는 transform의 value로 km은 targetUnits으로 들어온다.
<div class="col">
<label><b>Kilometers</b></label>
<div>{{ miles | convert: 'km' }}</div>
</div>
5-2-2 구현 소스이다.
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'convert'
})
export class ConvertPipe implements PipeTransform {
unit: number = 1.60934
transform(value: number, targetUnits: string): number | string {
if (!value) {
return ''
}
switch (targetUnits) {
case 'km':
return value * this.unit
case 'm':
return value * this.unit * 1000
case 'cm':
return value * this.unit * 1000 * 1000
default:
throw new Error('Target Unit is not supported')
}
}
}
6. 사용하기
6-1 10 킬로 이상의 경우에만 값을 meter로 표시되도록 하였다. *ngIf내에 사용될 때는 ( ) 가 필요하다.
6-2 소수 두번째 자리까지만 표시되도록 decimalpipe을 사용하였다.
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<div class="container">
<div class="row">
<div class="form-group col">
<label>Miles</label>
<input type="number" class="form-control" (input)="onMileChange($event.target.value)">
</div>
<div class="col" *ngIf="(miles | convert: 'km') > 10">
<label><b>Meters</b></label>
<div>{{ miles | convert: 'm' | number: '1.0-2' }}</div>
</div>
</div>
</div>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
miles: number = 0
onMileChange(value: string) {
this.miles = parseFloat(value)
}
}
6-3 화면
7. 위의 pipe를 가지고 각 단위별로 값을 출력할 수 있다.
7-1 m단위로 1킬로가 넘어가면 km 단위, 1m 이상 1킬로 미만은 m 단위, 1m 미만은 cm로 표시한다.
<div class="row">
<div class="form-group col">
<label>Miles</label>
<input type="number" class="form-control" (input)="onMileChange($event.target.value)">
</div>
<div class="col">
<ng-container *ngIf="(miles | convert: 'm') >= 1000; then km"></ng-container>
<ng-container *ngIf="(miles | convert: 'm') > 1 && (miles | convert: 'm') < 1000; then m"></ng-container>
<ng-container *ngIf="(miles | convert: 'm') < 1; then cm"></ng-container>
<ng-template #km>
<b>Kilometers</b>
<div>{{ miles | convert: 'km' | number: '1.0-2' }}km</div>
</ng-template>
<ng-template #m>
<b>Meters</b>
<div>{{ miles | convert: 'm' | number: '1.0-2' }}m</div>
</ng-template>
<ng-template #cm>
<b>Centimeters</b>
<div>{{ miles | convert: 'cm' | number: '1.0-2' }}cm</div>
</ng-template>
</div>
</div>
'Client Technologies > Angular' 카테고리의 다른 글
Angular : if-else 구조적 Directive template 몇 개 (0) | 2020.06.09 |
---|---|
Angular : Pagenation 구현하기 (0) | 2020.06.09 |
Angular : 유용한 Pipes (0) | 2020.06.09 |
Angular : npm Library 사용하기 (0) | 2020.05.15 |
Angular : Angular 기본 지식들 (0) | 2020.05.15 |
- Total
- Today
- Yesterday
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib
- MYSQL
- Validation
- Angular
- RestTemplate
- 매핑
- 스프링
- 하이버네이트
- one-to-many
- one-to-one
- Security
- hibernate
- login
- form
- spring boot
- Rest
- 스프링부트
- Many-To-Many
- 상속
- mapping
- 자바
- 로그인
- crud
- Spring
- XML
- 외부파일
- 설정
- 설정하기
- Spring Security
- jsp
- WebMvc