[英]Angular 2: Using ngIf inside ngFor not working
我有以下ngFor
循環:
<div *ngFor="let variety of varieties; let i=index">
<div class="varietyTypeName">
{{variety.VarietyTypeName}}
</div>
</div
打印出以下內容:
Greens
Greens
Greens
Fruits
我希望它不打印重復,所以(在這種情況下)我希望它打印出來:
Greens
Fruits
VarietyTypeNames
將始終在數組中分組在一起,因此,如果有多個Green,它們將總是一個接一個地排列。 我可以只使用一個ngIf
循環內,基本上只是告訴它只能顯示VarietyTypeName
如果它不等於先前VarietyTypeName
?
我嘗試在下面實現該邏輯,但出現錯誤。 我究竟做錯了什么?
<div *ngFor="let variety of varieties; let i=index">
<div *ngIf="variety[i].VarietyTypeName != variety[i - 1].VarietyTypeName" class="varietyTypeName">
{{variety.VarietyTypeName}}
</div>
</div
這是錯誤消息:
無法讀取未定義的屬性“ VarietyTypeName”
嘗試這個
<div *ngFor="let variety of varieties; let i=index">
<div *ngIf="variety.VarietyTypeName != varieties[i - 1]?.VarietyTypeName" class="varietyTypeName">
{{variety.VarietyTypeName}}
</div>
</div
您應該在控制器內部執行這種邏輯。
從數組中過濾所有重復項,然后簡單地對其進行迭代。
let filteredVarieties = varieties.filter((variety, index) {
return varieties.indexOf(variety) == index;
});
現在,您可以*ngFor
在新創建的filteredVarieties
我想應該是
<div *ngFor="let variety of varieties; let i=index">
<div *ngIf="variety.VarietyTypeName != i == 0 ? 0 : varieties[i - 1].VarietyTypeName" class="varietyTypeName">
{{variety.VarietyTypeName}}
</div>
</div
在這種情況下,您可能需要使用管道對值進行迭代之前對其進行過濾。 我將演示一個可能有用的簡單管道。 注意:我將使用庫lodash
簡化示例。
import { Pipe, PipeTransform } from '@angular/core'; import * as _ from 'lodash'; @Pipe({ name: 'filter' }) class FilterPipe { transform(input: any, term: any) { return _.uniqBy(input, term) } }
在導入管道之后,您將始終在angular 2中進行操作,這就是您擁有模板代碼的方式
<div *ngFor="let variety of varieties | filter : 'VarietyTypeName' "> {{variety.VarietyTypeName}} </div
PS記住將lodash添加到您的供應商文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.