2017-06-21 8 views
1

は、次のコードサンプルを考えてみましょう:私は同じ機能を実現することができますngIf - 他の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> 

私はこれらのための具体的な理由を知りたいです2つの方法を使用する必要があり、なぜですか?

+1

< - マークアップhere --->に10行以上の行がある場合はelseBlockを使用することをお勧めします。また、他の人が表示される否定セクションがあることを知るのに役立ちます。 マークアップの内容が10行未満であれば、2つのngIfは大丈夫です(自分の好み) –

+0

閉じる投票者に:いいえ、それは意見ではありません。地球が平らであると信じる人々がいるが、それは地球が平らで「主に意見に基づいている」のかどうかという疑問を投げかけない。 –

+0

私はこの質問に言い直して、事実がなくても意見を導き出すことはできません。私は今質問が誰の意見も求めないが、何かを達成する2つの方法のうちの1つを選択する理由を追求していると思う。答えとして、最初のオプションを支持する理由を開くように今投票したことがあれば、私は感謝します。@torazaburo私はあなたが同意してくれることを願っています –

答えて

3

elseを使用すると、条件を2回書くのを避けることができます。これはバグの原因になる可能性があるため、優先的に使用します。あなたが選択した場合は、テンプレートの下部にelseテンプレートを置くこともできます。これにより、テンプレートを読みやすくなります。

あなたはasyncパイプで観察をアンラップしている場合、また別の内部のサブスクリプションを作成するために、角度強制する別の<div *ngIf="!(myitems | async)">を追加するよりも、

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

を書き込むことがはるかに簡単です。

意見の問題としてこの質問を締めくくる人は間違っています。人々が何かに異なった意見を持っているかもしれないという事実は、価値のある有効なポイントがないことを意味するものではありません。

elseを使用している場合、単なる優先事項ではありませんでしたが、Angular開発者はAngular 4に優先順位を付けることになりました。

@Ishnarkが指摘しているように、パフォーマンスにも影響があります。

2

最初の解決策が優れています。どちらも同じことを達成していますが、最初はより洗練され、論理的に従うのが簡単です。

最初の解決方法は、です。理由は次のとおりです。

  1. 条件を評価するには時間がかかります。
  2. elseを使用すると、一度チェックするだけで済みます。 2番目の解決策では、条件が満たされているかどうか(時間がかかります)をチェックし、の条件が満たされていないかどうかを確認します。
  3. elseを使用すると、何らかの条件が満たされていない場合に行うアクションを実行できます。

EDIT:unsafenessに対処する@ toazaburoの答えを参照してください。

+0

Ishnarkと@toazaburoあなたの答えは私に意味をなさない。特に、if以外に "else"があるという事実は、この検査が失敗した場合、別のテンプレートがあることを直ちに明らかにする。また、2つのif文を使用するときに、if-elseブロックと2つのチェックの場合は、同じチェック規則に従うとパフォーマンスが向上します。そうすれば最初のものが使用されるはずです。もう一つの質問ですが、私は受け入れられた答えとしてどれをマークするべきですか? :-p –

+0

@toazaburoの解決策はあなたのケースにもっと当てはまると思います(あなたの 'ngIf'の条件は比較的簡単だと仮定しているので、パフォーマンスは問題にならないかもしれません)。 – Ishnark

+1

これは正しいです。彼の答えを受け入れる。しかし、あなたの入力にも感謝:) –