ngFor
を使用して単純なアプリケーションを作成し、配列から一連のボタンを作成しました。ボタンをクリックすると、その値が2番目の配列にプッシュされます。属性ディレクティブの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);
}
}
}