我創建了一個簡單的應用程序,使用ngFor
從數組中創建一系列按鈕。當一個按鈕被點擊時,它的值被推到第二個數組。在屬性指令中使用DoCheck
我有一個屬性指令disable
,它使用DoCheck()
監聽數組的更改,並禁用其數組已存在的任何按鈕,以防止它被多次添加。
這一切工作,但有沒有更好的方法? 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);
}
}
}