2017-08-17 63 views
2

我只想顯示活動插座。但通過這段代碼,我可以隱藏不活動的插座,但html元素仍然存在,並且會破壞設計。我也分享了輸出。這裏是我的代碼:Angular2 ngif只顯示活動狀態數據

app.component.html

<div class="col-md-6 mb-5" *ngFor="let outlet of outletLists"> 
      <ng-template [ngIf]="outlet.outlet.status === 'active'"> 

      <div class="card card-xs"> 
       <div class="card-block"> 
        <div class="media"> 
         <div class="media-body"> 
          <p class="card-title">{{ outlet.outlet.outletName }} {{ outlet.outlet.status }}</p> 
          <p class="small text-muted">{{ outlet.outlet.location }}</p> 
         </div> 
        </div> 
       </div> 
      </div> 
      </ng-template> 
     </div> 

app.component.ts

this.http.get(this.api) 
    .map(res => res.json()) 
    .subscribe(data => { 
     this.outletLists = data; 
    }, error => { 
     console.log(error); 
    }); 

data.json

[{ 
    "mdrPercent": 21, 
    "index": 0, 
    "transaction": { 
    "status": "void", 
    "referenceId": "599515bc8a7b11232747bd95", 
    "customerName": "Darla Madden", 
    "cashier": "Melissa Blackwell", 
    "notes": "anim pariatur duis reprehenderit pariatur duis proident sunt dolore exercitation", 
    "outletName": "Rita Ellis", 
    "deviceId": "599515bc3bc0a8e9aa11f94f", 
    "time": "11:43:44", 
    "date": "2017-02-14", 
    "transactionId": "599515bc74bf959a928ba6dc", 
    "amountPaid": 90.010000000000005 
    }, 
    "mdrRebate": 334.88999999999999, 
    "nettAmount": 322.76999999999998, 
    "status": "void", 
    "deviceId": "599515bc58e46cca66c914be", 
    "mdrAmount": 356.44, 
    "time": "10:21:45", 
    "date": "2016-03-07", 
    "transactionId": "599515bc861d4362aadf7fd9", 
    "amountPaid": 90.019999999999996, 
    "transactionAmount": "1,938.75", 
    "isActive": false, 
    "outlet": { 
    "status": "active", 
    "outletName": "Olivia Griffin Sdn Bhd", 
    "image": "http://placehold.it/100x100", 
    "outletId": "599515bcb5ed64a61c137bbb", 
    "location": "Goodwin, Malaysia" 
    } 

}]

輸出: enter image description here

+2

您是否嘗試過使用'ng-container'而不是'ng-template'?另外,它是'* ngIf',而不是'[ngIf]'? – Arg0n

+0

你的錯誤出現在'* ngFor'中,因爲你用col-md-6 css-class在div-tag中迭代它。迭代將爲outletLists中的每個元素創建此div,並在迭代後創建ng-template。嘗試使用ng-container。 –

回答

2

試着改變你的模板下面使用ng-container到:

<ng-container *ngFor="let outlet of outletLists"> 
    <div class="col-md-6 mb-5" *ngIf="outlet.outlet.status === 'active'"> 
     <div class="card card-xs"> 
      <div class="card-block"> 
       <div class="media"> 
        <div class="media-body"> 
         <p class="card-title">{{ outlet.outlet.outletName }} {{ outlet.outlet.status }}</p> 
         <p class="small text-muted">{{ outlet.outlet.location }}</p> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</ng-container> 
+0

這對我有用。謝謝@Argon –

+0

@SamuelKavinLoganathan沒問題,很高興它解決了你的問題。 – Arg0n

3

你似乎看空集裝箱佔用的空間,因爲你的外div已經預留了空間而不檢查status的插座,因爲它有div,col-md-5類適用於它。

更改外ngFor div來使用ng-template代替div,給從內ng-if DIV(從ng-template變更)申請的對齊類將解決您的問題。

ngIf應作爲*ngIf(全部結構指令需要使用它們之前開始)

<ng-template ngFor let-outlet [ngForOf]="outletLists"> 
    <div class="col-md-6 mb-5" *ngIf="outlet.outlet.status === 'active'"> 
     <div class="card card-xs"> 
      <div class="card-block"> 
       <div class="media"> 
        <div class="media-body"> 
         <p class="card-title"> 
          {{ outlet.outlet.outletName }} {{ outlet.outlet.status }} 
         </p> 
         <p class="small text-muted"> 
          {{ outlet.outlet.location }} 
         </p> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</ng-template> 

Working Plunker

+0

@ Arg0n不,它應該是'* ngIf',因爲它是結構指令 –

+0

@ Arg0n對不起,這是我的不好。正如我在理論上回答我的建議,我忘了將它從'ngFor'模板中移除。感謝您的領導:) –

+0

@ Arg0n愚蠢的我,怪胎,我搞砸了一切:(雖然我現在修好了,謝謝指出它。我不知道我是如何錯過這麼多的東西.. –

0

問題很簡單,有在最外的div爲每個出口創建的列,不管div是否沒有內容。一個簡單的解決方案可能是這樣的:

<div *ngFor="let outlet of outletLists"> 
    <div class="col-md-6 mb-5" *ngIf="outlet.outlet.status === 'active'"> 
    <div class="card card-xs"> 
     <div class="card-block"> 
     <div class="media"> 
      <div class="media-body"> 
      <p class="card-title">{{ outlet.outlet.outletName }} {{ outlet.outlet.status }}</p> 
      <p class="small text-muted">{{ outlet.outlet.location }}</p> 
      </div> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 

所以現在它不會創建一個列,直到if條件滿足。

+0

ngForf ngIf指令不能一起使用..雖然'[ngIf]'應該是'* ngIf' –

+0

我複製了他的代碼,是的,那是我的壞..沒有得到測試它 – Alexander

+0

@lexith是的,我的意思是說同樣的事情,他們不能在同一個元素上一起使用。我根據最初的回答者寫了評論,好像回答編輯這個.. –