배열에서 일련의 버튼을 만들기 위해 ngFor
을 사용하여 간단한 응용 프로그램을 만들었습니다. 버튼을 클릭하면 값이 두 번째 배열로 푸시됩니다.속성 지시문에 DoCheck 사용
DoCheck()
을 사용하여 배열의 변경 내용을 수신하고 배열에 값이 이미있는 단추를 두 번 이상 사용할 수 없게하는 특성 지시문 disable
이 있습니다.
모두 작동하지만 더 나은 방법이 있습니까? Angular 2 사이트에서는 DoCheck()
을 사용할 때주의해야합니다.
보기
<ul>
<li *ngFor="let myitem of myitems">{{ myitem }}
<a href="#" (click)="deleteItem(myitem)"> x</a>
</li>
</ul>
<button *ngFor="let item of items" (click)="addItem(item)" [disable]="myitems">{{item}}</button>
특성 지침
@Directive({
selector: '[disable]'
})
export class DisableDirective implements DoCheck {
@Input('disable') myitems : string[];
constructor(private el: ElementRef, private renderer: Renderer) { }
ngDoCheck() {
if(this.myitems.find(item => item === this.el.nativeElement.innerText)) {
this.renderer.setElementProperty(this.el.nativeElement, 'disabled', true);
this.renderer.setElementClass(this.el.nativeElement, 'disabled', true);
} else {
this.renderer.setElementProperty(this.el.nativeElement, 'disabled', false);
this.renderer.setElementClass(this.el.nativeElement, 'disabled', false);
}
}
}