7

我在计算 Angular 2 中的 ngFor 循环时遇到问题。我正在尝试开发一个具有 3 列和动态行数的网格。我想遍历我的数组并从左到右添加元素,每三个元素它应该跳到下一行。我使用离子框架 2.0。

我的代码如下所示:

   <ion-row *ngFor="#m of movies; #i = index"  (click)="movieTapped(m)">
        <ion-col width-33>
            <div class="row responsive-md">
                <img [src]="m.Poster" width="100%" />
                {{m.Title}} <br>
                Rating:     {{m.imdbRating}}<br>
                Rated:      {{m.Rated}}<br>
                Released:   {{m.Year}}<br>
            </div>
        </ion-col>
        <ion-col  width-33>
            <div class="row responsive-md">
                <img [src]="m.Poster" width="100%" />
            </div>
         </ion-col>
         <ion-col width-33>
            <div class="row responsive-md">
                <img [src]="m.Poster" width="100%" />
            </div>
         </ion-col>
  </ion-row>

希望你能帮助我。

干杯!

4

3 回答 3

15

如果您不想将数据结构格式化为列组(我可以理解),那么您仍然可以每行呈现 3 列。为此,您需要预先计算额外的行索引辅助数组,例如[0,1,2,3]. 数组中元素的数量应等于ion-row您要渲染的数量。因此,在您的控制器构造函数中,您可以执行以下操作:

this.rows = Array.from(Array(Math.ceil(this.movies.length / 3)).keys())

然后在模板中你将有两个ngFor循环:

<ion-row *ngFor="#i of rows" (click)="movieTapped(m)">
  <ion-col *ngFor="#m of movies | slice:(i*3):(i+1)*3" width-33>
    <div class="row responsive-md">
      <img [src]="m.Poster" width="100%" /> {{m.Title}}
      <br> Rating: {{m.imdbRating}}
      <br> Rated: {{m.Rated}}
      <br> Released: {{m.Year}}
    </div>
  </ion-col>
</ion-row>

而已。根据当前行索引切片管道呈现每行所需的项目。

这是简化的演示:http ://plnkr.co/edit/WyEfryGccFrJvwm6jExM?p=preview

于 2016-03-08T16:47:30.107 回答
7

您不必对数据进行任何更改!Ionic 2 已经为其提供了支持。

我们可以使用wrapin <ion-row>。例子:<ion-row wrap>

资源

在元素上使用 wrap 属性<ion-row>以允许该行中的项目进行换行。这会将flex-wrap: wrap;样式应用于<ion-row> 元素。

于 2016-08-26T13:04:39.887 回答
2

我会修改数据以表示您要呈现的结构(3 列的行),然后根据数据呈现视图。

<ion-row *ngFor="let r of rows; let i = index"  (click)="movieTapped(m)">
    <ion-col width-33 *ngFor="let m of r; let j = index">
        <div class="row responsive-md">
            <img [src]="m.Poster" width="100%" />
            {{m.Title}} <br>
            Rating:     {{m.imdbRating}}<br>
            Rated:      {{m.Rated}}<br>
            Released:   {{m.Year}}<br>
        </div>
    </ion-col>
</ion-row>
于 2016-03-08T14:26:03.553 回答