コンポーネントの初期化中に router.navigate() を使用してクエリ パラメータを設定する正しい方法は何ですか (コンポーネントのリロードをトリガーしません)? いくつかのバリエーションを試しましたが、すべて失敗します。@Routes を持つ app-component、@Routes を持つ親コンポーネント、および子コンポーネントがあります。アプリ ルートは「/:evt」->ParentComponent、親ルートは「/child」->ChildComponent です。子コンポーネントには
routerOnActivate(curr:RouteSegment) {
this.route = curr;
}
ngOnInit() {
...
this.updateUrl();
...
}
updateUrl() {
var query = { x=1, ... };
// Option 1
this.router.navigate(['child', query]);
// Option 2
this.router.navigate(['./child', query]);
// Option 3 - full /:evt/child
this.router.navigate(['/', this.event.id , 'child', query]);
// Option 4
this.router.navigate(['child', query], this.route);
}
オプション 1 と 2 では、コンポーネントの読み込みが失敗するか、少なくとも悪い状態になります。しかし、ログにエラーはありません。
オプション 3 は、完全なルートをリロードし、ページの先頭にジャンプします。なので使えませんが、使えそうです。
オプション 4 は、コンポーネントのリロードをトリガーします。したがって、アクティブ化、初期化、アクティブ化、初期化、および最終的な URL の 2x router.changes、/:evt/child の初期ルートのルート変更イベントなし、/:evt/child;x=1; のみを取得します。二回。_recognize からの子コンポーネントの欠落しているルートに関する例外が続きます。
また、子コンストラクター中に router.navigate() を呼び出してみましたが、それにより、Chrome がクラッシュする無限のコンポーネント リロード ループがトリガーされました :)。
Angular 1 では、コンポーネントの初期化中に $location.search(query) を呼び出すだけで、コンポーネントのリロードなしでクエリ パラメータを更新できました。Angular 2 RC 1 (再起動/リセット/やり直し候補;) では、同等の呼び出しが見つかりません。