2016-05-12 63 views
1

我的模板中包含的動態列表訪問元素:在NgFor循環

<ol> 
    <li #nameitem *ngFor="let name of names; let i = index" class="classA"  
     (click)="handleClick(i)">{{ name }}</li> 
</ol> 

我想更改項目的CSS類,當用戶點擊它。我試過使用MouseEvent的屬性,如targetcurrentTarget,但EventTarget不提供對類列表的訪問。所以我試圖獲得列表元素作爲查看兒童:

@ViewChildren("nameitem") private nameItems: QueryList<ElementRef>; 

這也不起作用。在事件處理程序,本土元素是不確定的:

private handleClick(i: number) { 
    console.log(this.nameItems[i].nativeElement.classList.length); 
} 

我得到的錯誤是:Cannot read property "nativeElement" of undefined。有什麼想法嗎?

由於

+0

如果您在handleClick中傳遞'$ event',那麼您可以從$ event中獲取目標並更新該類。 – Siraj

+0

當我第一次嘗試時,由於某種原因失敗。但我只是再次嘗試,它的工作。離奇。謝謝。 – user934904

回答

5

QueryList的元件可以除非使用toArray不能使用數組方式訪問。所以這個代碼失敗:

console.log(this.nameItems[i].nativeElement.classList.length); 

而且此代碼的​​工作:

console.log(this.nameItems.toArray()[i].nativeElement.classList.length); 

瘋狂。如果有人知道更好的方法,請告訴我。