2017-06-21 125 views
1

考慮下面的代碼示例:ngIf - 否則VS 2個ngIf條件

<div *ngIf="condition; else elseBlock"> 
    <!-- markup here --> 
</div> 
<ng-template #elseBlock> 
    <div> 
     <!-- additional markup here --> 
    </div> 
</ng-template> 

的另一種方式,我可以實現相同的功能是:

<div *ngIf="condition"> 
    <!-- markup here --> 
</div> 
<div *ngIf="!condition"> 
    <!-- additional markup here --> 
</div> 

我想知道具體原因,其中這些應該使用兩種方式,爲什麼?

+1

如果< - 標記這裏--->有很多行說10多行,我寧願使用elseBlock,它也將幫助其他人知道有一個否定部分將被顯示。 如果標記內容少於10行,那麼兩個ngIf就可以(我的個人偏好) –

+0

對於最接近選民:不,這不是一個意見問題。雖然有人認爲地球是平坦的,但這並不表示地球是否「平坦」,主要是基於意見的問題。 – 2017-06-21 17:41:43

+0

我已經重寫了這個問題,因此它沒有任何事實不會推導出意見。我想現在這個問題並沒有要求任何人的意見,但它尋求理由選擇兩種方式之一,實現某些東西。如果現在投票表決,我將不勝感激,作爲答案,提出支持第一種選擇的理由。@torazaburo我希望你會同意 –

回答

3

使用別的可以讓你避免編寫條件的兩倍,這可能是錯誤的來源,所以我會用優先。如果您願意,還可以將其他模板放在模板的底部,這樣可以使模板更易於閱讀。

如果要展開可觀察到的與async管,然後是寫

<div *ngIf="myItems$ | async as myItems; else noItemsYet"> 

比增加另一個<div *ngIf="!(myitems | async)">,這也將迫使角再創建一個內部認購容易得多。

那些投票關閉這一問題作爲見仁見智是錯誤的。事實上,人們對事物可能有不同意見並不意味着沒有值得提出的有效點。

如果使用else是單純的喜好,我懷疑開發商角度會優先考慮它角4像他們那樣。

由於@Ishnark指出,可能存在的性能問題,以及。

2

第一個解決方案是更好的。儘管兩者都實現了同樣的目標,但第一個更清晰,更容易遵循邏輯。

你只能做一個檢查與第一溶液。這是一個很好的解決方案,因爲:

  1. 評估條件需要時間。
  2. 通過使用其他,你只需要檢查一次。在第二種解決方案中,檢查是否滿足條件(需要時間),然後檢查是否滿足相同條件
  3. 使用else可以讓您在某種情況下無法滿足條件時採取措施。

編輯:見@ toazaburo的答案,這解決了不安全。

+0

Ishnark和@toazaburo你的答案對我有意義。特別是除了if之外還有一個「else」這個事實,如果這個檢查失敗,可以立即清楚地發現還有另一個模板。另外,如果性能明智,如果它遵循相同的單一檢查規則,如果「if-else」塊與兩次檢查時我們使用兩個if語句,那麼是的,我猜應該使用第一個。現在又有一個問題,我應該將哪一個標記爲公認的答案? :-p –

+0

我認爲@toazaburo的解決方案更適用於您的案例(我假設您的'ngIf'中的條件相對簡單,因此性能可能不成問題)。 – Ishnark

+1

這是正確的。然後接受他的回答。但感謝您的投入,以及:) –