web-dev-qa-db-ja.com

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

Teddy Sterneのおかげで、私はこの解決策を見つけました。

<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>

Angularは、すぐにこの機能を提供しません。希望する結果を達成する最も簡単な方法は、次のように3番目のインデックスごとにデータを表示することだと思います。

<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>

デモ

49
Teddy Sterne

インデックスについては、これを試してください:

コントローラーファイルの追加機能:

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つの製品がある場合、最後の2つが失われるのは6つだけで、これも表示されます。

また、要素を調べてチェックすると、各製品をループし、インデックス%3であるかどうかに関係なくdivが繰り返されるため、%3インデックスではない追加の空白divタグが作成されます。

4
Vivek Doshi

テディスターンの回答に感謝します。

7行のセルを持つカレンダーコントロールを作成するのにどのように役立ちましたか

<div class="container-fluid">
  <table class="table table-bordered">
    <ng-container *ngFor="let d of data; let i = index" >
      <tr *ngIf="i % 7 === 0">
        <td *ngFor="let x of [i,i+1,i+2,i+3,i+4,i+5,i+6]">
          {{data[x]}}
        </td>
      </tr>
    </ng-container>
  </table>      
</div> 

DEMO

https://stackblitz.com/edit/angular-1nhor2?embed=1&file=src/app/app.component.html

1
purvin