2017-10-11 52 views
0

有人可以向我解釋爲什麼使用Angular 4模板的這段代碼中的工具提示不起作用嗎?工具提示不能在ngFor屬性中使用標籤

<template ngFor let-channel [ngForOf]="channels"> 
    <td> 
    <em *ngFor="let color of findBallsColor()" class="fa fa-circle {{ color }}" [tooltip]="id"></em> 
    </td> 
</template> 
<ng-template #id> 
    test 
</ng-template> 

如果我刪除*ngFor<em>標籤正常工作內(只顯示一個元素很明顯)。對Angular來說,我很新,所以可能我錯過了一些關於它在這裏真正起作用的理解。

編輯

我發現問題來了從打字稿函數的返回類型。在上面的代碼中,由findBallsColor()返回的列表實際上是一個包含4個字段的對象。當我改變它只是返回一個字符串的作品。因此,代碼類似於此:

HTML:

<template ngFor let-channel [ngForOf]="channels"> 
    <td> 
    <em *ngFor="let color of findBallsColor()" class="fa fa-circle {{ status.color }}" [tooltip]="id"></em> 
    </td> 
</template> 
<ng-template #id> 
    test 
</ng-template> 

TS:

findBallsColor():any[] { 
    return [{"statut":"ERROR","name":"name","otherField":"value","anotherField":"value"}]; 
} 

有誰知道這種行爲爲什麼呢?

回答

0

我有類似的問題,這裏有一個摘自this Github的問題,它詳細說明了你的* ngFor獲取數據的方式有什麼問題。


調用從模板的功能是不是一個很好的做法,這就是爲什麼這個建議存在一個例子。

在第一種情況下觸發工具提示時,它會啓動一個角度檢測週期,該週期再次調用items(),並嘗試再次顯示工具提示,並開始另一個角度檢測週期並繼續並重復。

起初,建議的存在是爲了避免性能問題,但它有其他後果,就像你的情況。

如果你把項目(一的console.log),你會看到它不斷被一次又一次地叫......

如果調用一個函數是強制性的,使用管道來代替。


所以,在你的代碼,如果你使用的管道或某種可觀察或數組,然後你提示的工作,但目前它只是不斷調用函數。

相關問題