Angular 4.0特集のラストはrouterモジュール、httpモジュールの変更と、新たに追加されたanimationsモジュールについての解説です。
routerモジュールの変更
イベントの追加
Router
が発火するイベントに、Lazy Loading用のRouteConfigLoadStart
とRouteConfigLoadEnd
が追加されました。 RouterModule.forChild()
で遅延して読み込まれた設定をRouterに取り込みはじめた時と、それが終わった時に発火されます。
runGuardsAndResolvers
設定の追加
Route
に新しくrunGuardsAndResolvers
プロパティが追加されました。 これは同じルートが選択されているときに、GuardやResolverが再実行するタイミングを制御するためのものです。
runGuardsAndResolvers
が取り得る値は paramsChange
、paramsOrQueryParamsChange
そしてalways
の3種類です。 paramsChange
はデフォルトの設定で、これまでの挙動と同じです。 GuardとResolverが再実行するのはパスパラメータかマトリクスパラメータが変わったときだけです。 paramsOrQueryParamsChange
では、デフォルトの挙動に加えてクエリパラメータの変更時にも再実行されます。 そしてalways
ではあらゆるナビゲーションで再実行されます。
runGuardsAndResolvers
は次のように設定します。
{
path: 'admin',
component: AdminCmp,
runGuardsAndResolvers: 'paramsChange',
canActivate: [AdminAuth]
},
httpモジュールの変更
リクエストオプションのsearch
が非推奨に
RequestOptions
型のsearch
プロパティが非推奨のAPIとなります。 このプロパティはリクエストURLにクエリパラメータを付与するためのものでしたが、今後は新しく追加されるparams
プロパティを使います。
次のコードを見ればとても使いやすくなることがわかります。
// Before
const search = new URLSearchParams();
search.append('id', 'foo');
search.append('name', 'bar');
this.http.get(url, {search});
// After
this.http.get(url, {params: {id: 'foo', name: 'bar'}});
これまでsearch
プロパティが受け取るオブジェクトの型はstring|URLSearchParams
でしたが、 4.0以降はこれに加えて{[key: string]: any|any[]}
型のマップオブジェクトを受け取ることができます。 params
プロパティも同じ型のオブジェクトを受け取れます。 内部的にはparams
をパースして内部のsearch
プロパティを組み立てる、という処理になっているので、 4.x系の間は破壊的変更を防ぐためにどちらのプロパティも同じ挙動で動作しますが、 5.0からはsearch
プロパティは外部からは見えないようになります。
animationsモジュール
animationsモジュールはこれまでcoreモジュールに同梱されていたアニメーションAPIを、独立したモジュールに分割したものです。 アニメーションを必要としないアプリケーションが不要なコードを含まないようにすることを目的としています。
また、animationsモジュールはさらに便利になる新しいAPIがいくつも開発中です。 まだ4.0ではリリースされませんが、ひとつだけ4.0に含まれる変更があるので紹介します。
transition式の関数サポート
transition
の第1引数はこれまで文字列でhide => show
や* => void
など定義していましたが、 これに加えてfromState
とtoState
を受け取ってboolean
を返す関数を渡せるようになります。 次のコード例を見てください。
transition('hide => show', ...)
// equivalent to
const hide2show = (from, to) => from === 'hide' && to === 'show';
transition(hide2show, ...)
transition('void => *', ...)
// equivalent to
const fromVoid = (from, to) => from === 'void';
transition(fromVoid, ...)
まとめ
- Lazy Loadingのサポート強化
- Guard/Resolveがさらに便利に
- Httpの
search
が非推奨に - animationsモジュールの追加
Angular 4.0 Features