Angular2 Получить ссылку на элемент, созданный в ngFor
Как мне обратиться за ссылкой на элемент в dom, который был создан в цикле ngFor.
например. У меня есть список элементов, которые я повторяю:
var cookies: Cookie[] = [...];
<div *ngFor="#cookie of cookies" id="cookie-tab-button-{{cookie.id}}" (click)="showcookie(cookie);">Cookie tab</div>
<div *ngFor="#cookie of cookies" id="cookie-tab-content-{{cookie.id}}" ">Cookie Details</div>
Как я могу ссылаться на эти div, поэтому я мог бы добавить класс css, например "is-active".
Или мой подход ошибочен.
Ответы
Ответ 1
Если вы хотите добавить/удалить привязку к использованию класса
<div *ngFor="let cookie of cookies" [class.isActive]="someExpression" ....>
или
<div *ngFor="let cookie of cookies" [ngStyle]="{'isActive': someExpression}" ....>
Конкретный пример:
activeCookie:string = 'b';
cookies:string[] = ['a', 'b', 'c'];
<div *ngFor="letcookie of cookies" [class.isActive]="cookie == activeCookie" ....>
Если вы действительно хотите получить ссылку, вы можете использовать
<div #someName *ngFor="let cookie of cookies" id="cookie-tab-button-{{cookie.id}}" (click)="showcookie(cookie);">Cookie tab</div>
@ViewChildren('someName') someDivs;
ngAfterViewInit() { // or some event handler
someDivs.toArray()[0].nativeElement.classList.add('isActive');
}
Ответ 2
<style>
.active{
background:blue;
}
</style>
<div [ngClass]="{active:(i==selectedIndex)}"
*ngFor="#cookie of cookies;#i=index"
id="cookie-tab-button-{{cookie.id}}"
(click)="showcookie(cookie,i);">Cookie tab
</div>
showcookie(val, i){
console.log(val + i);
this.selectedIndex=i;
}
Ответ 3
Вы можете использовать ng-контейнер, который не будет отображаться:
<ng-container *ngFor="let cookie of cookies">
<div id="cookie-tab-button-{{cookie.id}}" (click)="showcookie(cookie);">Cookie tab</div>
</ng-container>
Ответ 4
<div *ngFor="let item of items" (click)="itemClick($event.currentTarget)"></div>
itemClick(dom){
dom.style.color='red';
// ...
}