2017-04-24 85 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