Я создал простое приложение, используя 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);
}
}
}