Angular2获取对ngFor中创建的元素的引用

时间:2016-03-22 06:45:42

标签: angular

如何引用在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;。 或者我的方法是错的。

5 个答案:

答案 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;
}

这提供了对父级子控件的引用数组。