Angular4以降のngIfの新機能

提供:Dev Guides
移動先:案内検索

Angular 4はわずか数日で到着する予定であり、組み込みのngIfテンプレートディレクティブに優れた追加機能があります。 つまり、else句に使用するテンプレートを定義し、if句の結果の値を保持するローカル変数を割り当てることができます。

ngIfでこれら2つの新機能を使用する方法は次のとおりです。

その他の条項

したがって、以前は、 ngIf ステートメントの一部としてelse句を使用するには、代わりに、最初のステートメントを否定して別のngIfステートメントを作成する必要がありました。

<div *ngIf="likeThis">
  Like this!
</div>
<div *ngIf="!likeThis">
  Like that!
</div>

しかし、これで、ng-templateで定義したテンプレートの参照名を使用してelse句を定義できます。

<div *ngIf="things.car; else noCar">
  Nice car!
</div>
<ng-template #noCar>
  Call a Uber.
</ng-template>

ローカル変数の割り当て

多くの場合、ifステートメントの結果の値は、ブール値のtrueまたはfalseだけでなく、簡単に参照できる値になります。 新しいngIfを使用すると、ifステートメントの結果をローカル変数に簡単に割り当てることができます。 たとえば、 things オブジェクトは、コンポーネントクラスでは次のようになります。

things = {
  car: 'Honda',
  shoes: 'Nike',
  shirt: 'Tom Ford',
  watch: 'Timex'
};

そして、次のようにifステートメントの結果を参照できます。

<div *ngIf="things.car; let car">
  Nice {{ car }}!
</div>
<!-- Nice Honda! -->

もちろん、else句とローカル変数の割り当ての両方を組み合わせることができます。

<div *ngIf="things.car; else noCar; let car">
  Nice {{ car }}!
</div>
<ng-template #noCar>
  Call a Uber.
</ng-template>

非同期パイプを使用するngIf

Angular Universityのこの投稿で説明されているように、 ngIf ディレクティブの新機能は、非同期パイプと組み合わせて使用すると非常に強力になります。

たとえば、 async パイプを使用して、オブザーバブルを自動的にサブスクライブし、else句を使用してロードテンプレートを定義し、オブザーバブルからの結果の値をローカル変数に配置できます。

説明のために簡単なオブザーバブルを作成しましょう。

// ...
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/delay';

// ...
export class AppComponent {
  things$ = Observable.of({
    car: 'Honda',
    shoes: 'Nike',
    shirt: 'Tom Ford',
    watch: 'Timex'
  }).delay(1000);
}

オブザーバブルは、データを送信する前に1秒間待機することで、ネットワーク呼び出しを模倣します。

これで、 async パイプを使用して、 things $ observableをサブスクライブし、読み込みメッセージのテンプレートを使用してelse句を定義し、ローカル変数を宣言できます。オブザーバブルがデータを取得したらアクセスするには:

<div *ngIf="things$ | async; else loading; let things">
  Nice {{ things.watch }}! <!-- Nice Timex! -->
</div>
<ng-template #loading>
  Loading your things...
</ng-template>