#angular #angular2-components
#angular #angular2-компоненты
Вопрос:
У меня есть массив объектов, которые я хочу перебрать, используя Angular *ngFor .
После отображения элементов я хочу установить новое свойство для объектов (называемое nativeElement), которое ссылается на узел HTML, отображающий этот объект.
Следующий код иллюстрирует цель, но, очевидно, не работает.
<div *ngFor="let obj of arrayOfObjs"
[ngInit]="obj.nativeElement = thisDivNode">
</div>
Как я могу установить ссылку на элемент в obj самым чистым способом?
Комментарии:
1. какую версию angular вы используете бета-версию или стабильную
2. Я использую stable / final
Ответ №1:
Вы могли бы просто создать директиву и передать ей элемент, и позволить директиве назначить элемент элементу
@Directive({
selector: '[addElement]'
})
class AddElementDirective implements OnInit, OnDestroy {
@Input('addElement') obj: any;
constructor(private el: ElementRef) {}
ngOnInit() {
this.obj.nativeElement = this.el.nativeElement;
}
ngOnDestroy() {
this.obj.nativeElement = null;
}
}
Затем просто используйте его как
<div *ngFor="let item of data" [addElement]="item">
</div>
Лично я считаю, что это чище, чем любая акробатика разметки, которую вы можете придумать.
Комментарии:
1. Мне это нравится. Было бы еще лучше, если бы вы могли попросить ngFor предоставить текущий «элемент», не передавая его в атрибуте. Что-то вроде <my-element *ngFor=»разрешить элемент данных»></my-element> и позволить компоненту автоматически позаботиться об этом внутренне. Возможно ли это?
2. Кроме того, действительно ли ngOnDestroy необходим для этого? Можете ли вы объяснить, почему это может привести к утечке памяти? Если предмет был удален из коллекции, как вы можете быть уверены, что он не будет должным образом очищен?