2

コンポーネントの初期化中に 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 (再起動/リセット/やり直し候補;) では、同等の呼び出しが見つかりません。

4

0 に答える 0