【Angular】커스텀 파이프로 드롭다운 항목을 연동시킨다
실현하고 싶은 것
*를 표시하고 싶습니다
요일 목록 예
초기 상태
시작에 [물]을 선택한 경우 종료에는 [물, 나무, 금, 토]만 표시된다
종료에 [금]을 선택한 경우, 시작에는 [일, 월, 불, 물, 나무, 금]만 표시된다
환경
node.js
root@user:/app/my-app# node --version
v12.7.0
Angular
package.json"dependencies": {
"@angular/animations": "~8.0.0",
"@angular/common": "~8.0.0",
"@angular/compiler": "~8.0.0",
"@angular/core": "~8.0.0",
"@angular/forms": "~8.0.0",
"@angular/platform-browser": "~8.0.0",
"@angular/platform-browser-dynamic": "~8.0.0",
"@angular/router": "~8.0.0"
}
소스 코드
구성요소
app.component.tsimport { Component, OnInit, Pipe, PipeTransform } from '@angular/core';
@Component({
selector: 'app-dropdown',
templateUrl: './dropdown.component.html',
styleUrls: ['./dropdown.component.css']
})
export class DropdownComponent implements OnInit {
days = ['日', '月', '火', '水', '木', '金', '土'];
startDay: string;
endDay: string;
constructor() {}
ngOnInit() {
// 初期値の設定
this.startDay = this.days[0];
this.endDay = this.days[this.days.length - 1];
}
}
맞춤형 파이프
dayfilter.pipe.ts@Pipe({ name: 'dayFilter' })
export class DayFilterPipe implements PipeTransform {
transform(days: string[], startDay?: string, endDay?: string) {
if (startDay) {
const index = days.findIndex(day => day === startDay);
return days.slice(index);
}
if (endDay) {
const index = days.findIndex(day => day === endDay);
return days.slice(0, index + 1);
}
return days;
}
}
템플릿
*ngFor에 커스텀 파이프를 설정한다.
app.component.html<div>
<label>開始</label>
<select [(ngModel)]="startDay">
<option
[ngValue]="day"
*ngFor="let day of days | dayFilter: undefined:endDay"
>{{ day }}</option
>
</select>
<label>終了</label>
<select [(ngModel)]="endDay">
<option
[ngValue]="day"
*ngFor="let day of days | dayFilter: startDay:undefined"
>{{ day }}</option
>
</select>
</div>
모듈
사용자 정의 파이프를 declarations에 추가합니다.
app.module.tsimport { DayFilterPipe } from './dayfilter.pipe';
@NgModule({
declarations: [
// other imports ...
DayFilterPipe
]
export class AppModule {}
마지막으로
파이프는 개시용과 종료용으로 나누는 편이 좋을지도.
참고
root@user:/app/my-app# node --version
v12.7.0
"dependencies": {
"@angular/animations": "~8.0.0",
"@angular/common": "~8.0.0",
"@angular/compiler": "~8.0.0",
"@angular/core": "~8.0.0",
"@angular/forms": "~8.0.0",
"@angular/platform-browser": "~8.0.0",
"@angular/platform-browser-dynamic": "~8.0.0",
"@angular/router": "~8.0.0"
}
구성요소
app.component.ts
import { Component, OnInit, Pipe, PipeTransform } from '@angular/core';
@Component({
selector: 'app-dropdown',
templateUrl: './dropdown.component.html',
styleUrls: ['./dropdown.component.css']
})
export class DropdownComponent implements OnInit {
days = ['日', '月', '火', '水', '木', '金', '土'];
startDay: string;
endDay: string;
constructor() {}
ngOnInit() {
// 初期値の設定
this.startDay = this.days[0];
this.endDay = this.days[this.days.length - 1];
}
}
맞춤형 파이프
dayfilter.pipe.ts
@Pipe({ name: 'dayFilter' })
export class DayFilterPipe implements PipeTransform {
transform(days: string[], startDay?: string, endDay?: string) {
if (startDay) {
const index = days.findIndex(day => day === startDay);
return days.slice(index);
}
if (endDay) {
const index = days.findIndex(day => day === endDay);
return days.slice(0, index + 1);
}
return days;
}
}
템플릿
*ngFor에 커스텀 파이프를 설정한다.
app.component.html
<div>
<label>開始</label>
<select [(ngModel)]="startDay">
<option
[ngValue]="day"
*ngFor="let day of days | dayFilter: undefined:endDay"
>{{ day }}</option
>
</select>
<label>終了</label>
<select [(ngModel)]="endDay">
<option
[ngValue]="day"
*ngFor="let day of days | dayFilter: startDay:undefined"
>{{ day }}</option
>
</select>
</div>
모듈
사용자 정의 파이프를 declarations에 추가합니다.
app.module.ts
import { DayFilterPipe } from './dayfilter.pipe';
@NgModule({
declarations: [
// other imports ...
DayFilterPipe
]
export class AppModule {}
마지막으로
파이프는 개시용과 종료용으로 나누는 편이 좋을지도.
참고
Reference
이 문제에 관하여(【Angular】커스텀 파이프로 드롭다운 항목을 연동시킨다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nishitaku/items/b934536acc9f903dc548텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)