2017-04-24 152 views
2

以下情况在javascript中很容易,但我在使用Angular时遇到了一些问题。Angular 2:* ngFor in * ngFor

我像一个数组:

array a = ("id" = 0, name = random(), column = 1, 2 or 3, blockrow= 1, 2 or 3) 

随着ngFor我现在尝试创建一个网格存在的所有元素出在此列colums和块走散了。所以我现在的代码(工作但讨厌)。

<div *ngFor="let a of a"> 
 
    <template [ngIf]="a.column=='1'"> 
 
    <div *ngFor="let b of a"> 
 
     <template [ngIf]="b.blockrow=='1'"> 
 
     Block 1 in column 1{{b.name}} 
 
     </template> 
 
    </div> 
 
    <div *ngFor="let b of a"> 
 
     <template [ngIf]="b.blockrow=='2'"> 
 
     Block 2 in column 1{{b.name}} 
 
     </template> 
 
    </div> 
 
    <div *ngFor="let b of a"> 
 
     <template [ngIf]="b.blockrow=='3'"> 
 
     Block 3 in column 1{{b.name}} 
 
     </template> 
 
    </div> 
 
    </template> 
 
</div>

像这样做我跑每列。这意味着我循环12次相同的阵列。有什么办法可以更美丽吗?

回答

2

在你的组件,使用JavaScript来构建一个数组的数组与一个在正确的坐标中的元素,然后使用* ngFor inside * ngFor:

<div *ngFor="let row of rows"> 
    <div *ngFor="let col of row"> 
    Block {{col.blockrow}} in column {{col.column}} {{col.name}} 
    </div> 
</div> 

如果几个块具有相同的坐标,则可能需要第三个* ngFor。

+0

所以我可以用这种方式处理多维数组。完美的谢谢你,这正是我想要的。 – Doomenik

0

您正在使用错误的语法应该是*ngIf而不是[ngIf]

<div *ngFor="let a of a"> 
    <template *ngIf="a.column=='1'"> 
    <div *ngFor="let b of a"> 
     <template *ngIf="b.blockrow=='1'"> 
     Block 1 in column 1{{b.name}} 
     </template> 
    </div> 
    <div *ngFor="let b of a"> 
     <template *ngIf="b.blockrow=='2'"> 
     Block 2 in column 1{{b.name}} 
     </template> 
    </div> 
    <div *ngFor="let b of a"> 
     <template *ngIf="b.blockrow=='3'"> 
     Block 3 in column 1{{b.name}} 
     </template> 
    </div> 
    </template> 
</div> 
+0

更改它顶部,编辑器使用角1,但这不是我的问题。只是想知道是否有一种方法不经常运行循环。 – Doomenik

+0

我没有找到你 – Aravind

+0

在我的例子中,我循环了4次相同的数组。为了使它完成工作,我需要这3次,这意味着12次循环通过相同的数组。在我看来,这是非常低效的。在普通的JS中,我可以做同样的事情,只通过一次数组。所以我的问题是,是否有办法更好地完成这个代码块?有点像如果b.blockrow == 1 - >添加到div1,如果b.blockrow == 2添加到div 2. – Doomenik