2017-03-29 141 views
15

我有這樣的代碼:使用Angular2 ngFor指數

<div class="row list-group"> 
    <div *ngFor="let product of products" > 
    <app-product [product]="product"></app-product> 
    </div> 
</div> 

我想知道有沒有什麼辦法可以從水桶陣列產品?事情是這樣的:

<div class="list-group"> 
    <div *ngFor="products; index+3" > 
    <div class="row"> 
     <app-product [product]="products[index]"></app-product> 
     <app-product [product]="products[index+1]"></app-product> 
     <app-product [product]="products[index+2]"></app-product> 
    </div> 
    </div> 
</div> 

這樣我可以有我在一排需要

UPD

由於泰迪斯特恩我結束了這個解決方案的所有元素:

<div class="list-group"> 
    <div *ngFor="let product of products;let i = index"> 
    <div class="row" *ngIf="i%3===0"> 
     <app-product [product]="products[i]"></app-product> 
     <div *ngIf="products[i + 1]"> 
     <app-product [product]="products[i + 1]"></app-product> 
     </div> 
     <div *ngIf="products[i + 2]"> 
     <app-product [product]="products[i + 2]"></app-product> 
     </div> 
    </div> 
    </div> 
</div> 

回答

3

索引請試試這個:

Co ntroller文件添加功能:

chunks(array, size) { 
    let results = []; 
    while (array.length) { 
    results.push(array.splice(0, size)); 
    } 
    return results; 
}; 

在您查看文件:

<div *ngFor="let chunkProduct of chunks(products,3);" > 
    <div class="row"> 
     <app-product *ngFor="let product of chunkProduct" [product]="product"></app-product> 
    </div> 
</div> 

這將爲所有號碼,不僅%3號工作。

@Teddy Sterne的解決方案將工作的數量是%3如果我們有8個產品,它會顯示只有6個最後2將丟失,在這也會顯示。

如果您檢查元素並檢查,它會爲非%3索引創建額外的空白div標籤,因爲它將循環遍歷每個產品,並且無論索引是否爲%3,div都會重複。

+0

這將爆炸 - 又名給索引越界的錯誤。 – Matthias247

+0

嘗試這一個,測試和工作正常 –

+0

@VivekDoshi假設產品長度爲6.當索引爲5時,最後一條語句會發生什麼? – echonax

26

Angular不提供此功能。我認爲,要達到預期的效果最簡單的方法是將每月的第三個指標只顯示數據,像這樣:

<div class="list-group"> 
    <div *ngFor="let p of products; let idx = index" > 
    <div class="row" *ngIf="idx % 3 === 0"> 
     <app-product [product]="products[idx]"></app-product> 
     <app-product [product]="products[idx+1]"></app-product> 
     <app-product [product]="products[idx+2]"></app-product> 
    </div> 
    </div> 
</div> 

Demo

+0

猜測你需要對「index + 1」和「index + 2」元素進行邊界檢查。除此之外,它應該工作:) – Matthias247

+0

如果指令可以處理'undefined',它應該沒問題。否則是的,你可以添加一個'* ngIf'到每一行來防止它。 –

+0

謝謝,完美的工作! –