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

Mat*_*ers 21 angular

我将如何引用在ngFor循环中创建的dom中的Element.

例如,我有一个迭代的元素列表:

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>
Run Code Online (Sandbox Code Playgroud)

我如何引用这些div,所以我可以添加一个像"is-active"这样的css类.或者我的方法是错的.

Gün*_*uer 29

如果要添加/删除类使用绑定

<div *ngFor="let cookie of cookies" [class.isActive]="someExpression" ....>
Run Code Online (Sandbox Code Playgroud)

要么

<div *ngFor="let cookie of cookies" [ngStyle]="{'isActive': someExpression}" ....>
Run Code Online (Sandbox Code Playgroud)

具体例子:

activeCookie:string = 'b';
cookies:string[] = ['a', 'b', 'c'];
Run Code Online (Sandbox Code Playgroud)
<div *ngFor="letcookie of cookies" [class.isActive]="cookie == activeCookie" ....>
Run Code Online (Sandbox Code Playgroud)

如果您真的想获得参考,您可以使用

<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');
}
Run Code Online (Sandbox Code Playgroud)

  • @GünterZöchbauer:嘿,我想从ngFor获取引用,我复制了上面的代码,除了在函数ngAfterViewInit()中添加“ this”:“ this.someDivs [0] .nativeElement.classList.add('isActive');” 。但是,我收到一个错误:无法读取未定义的属性'nativeElement'。如果我`console.log(this.someDivs); 在控制台中输出QueryList。如果为`console.log(this.someDivs);`,则其类型为object。如果为“ console.log(this.someDivs [0])”,则其输出未定义。 (2认同)

mic*_*yks 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;
}
Run Code Online (Sandbox Code Playgroud)