如何引用在ngFor循环中创建的dom中的元素。
e.g。我有一个我迭代的元素列表:
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类,如#34; is-active&#34;。 或者我的方法是错的。
答案 0 :(得分:27)
如果要添加/删除类使用绑定
<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');
}
答案 1 :(得分:9)
<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;
}
答案 2 :(得分:3)
您可以使用未呈现的ng-container:
<ng-container *ngFor="let cookie of cookies">
<div id="cookie-tab-button-{{cookie.id}}" (click)="showcookie(cookie);">Cookie tab</div>
</ng-container>
答案 3 :(得分:1)
<div *ngFor="let item of items" (click)="itemClick($event.currentTarget)"></div>
itemClick(dom){
dom.style.color='red';
// ...
}
答案 4 :(得分:0)
另一种变化:
在父控件中:
// typescript
childControls: ChildComponent[] = [];
<!-- HTML -->
<ng-container *ngFor='let period of periods'>
<app-child [period]='period' [parent]='this'></app-child>
</ng-container>
在子控件中:
private _parent: ParentComponent;
@Input() set parent(value: ParentComponent) {
this._parent.childControls.push(this);
}
get parent(): ParentComponent {
return this._parent;
}
这提供了对父级子控件的引用数组。