1

Angular 2 ルーティングでエラーが発生しました。(angular/router2.0.0-rc1 を使用)

ルートは次のようになります。

tabs/editItem (For creating a new item)
tabs/id/editItem (For editing an item)
tabs/id/itemStuff
tabs/id/differentStuff

タブ コンポーネントでは、ID が指定されていない場合は itemStuff および differentStuff オプションを無効にする必要がありますが、ID がある場合は有効にします。

テンプレートの ID に NgIf を使用しました。

  routerOnActivate(curr: RouteSegment) {
    if(curr.getParam('pId') == null)
      return;

    this.pId = +curr.getParam('pId');
  }

問題は、「routerOnActivate」がルート エンドポイントでのみ呼び出されるため、タブ ページからルート パラメータにアクセスできないことです。子要素にチェックをさせてから、タブコンポーネントが更新されるようにイベントを送り返すというオプションがあるようですが、それは見苦しく、これを行う正しい方法ではありません。

どんな助けでも大歓迎です!

TLDR: 親コンポーネントがパラメーターにアクセスして処理する方法

4

2 に答える 2

1

まず、ルーターの v3 を使用するようにプロジェクトをアップグレードすることをお勧めします。v2 ルーターはもはや開発されておらず、v3 ルーターは v2 ルーターとはまったく異なる働きをします。

親/子パラメーターの問題に関しては、残念ながら、子ルートに親パラメーターが与えられていないという点で、v3 と同じ問題が少し発生します。それらはActivatedRoute、親や子ではなく、指定されたルートのパラメーターのみを保持する新しい注入可能なルーター コンポーネントを介して配信されます。

この動作は設計によるものと思われます。つまり、そのパラメーターを「所有」するコンポーネントでパラメーターを処理し、別のサービスを介して他の親/子ルートでこれらを利用できるようにする必要があります。

回避策については、ルーターコンポーネントを介して直接これを行う方法はまだ見たことがありませんが、ルーター API への絶え間ない変更により、回避策は安定したオプションではない可能性が高いと言えます。

これは、この動作が間違った方法であり、より困難であるように思えるかもしれませんが、大規模なプロジェクトでは、長期的にはプロジェクトをより堅牢にする懸念の強力な分離です。

お役に立てれば!

于 2016-07-04T22:27:02.533 に答える
1

この問題に遭遇したばかりなので、これを復活させます。ActivatedRoute ツリーを登ることで、親からプロパティを取得できるはずです。

  getId(route: ActivatedRouteSnapshot){
      let id = route.params["id"];
      if(id)
      {
        return id;
      }
      if(route.parent)
      {
        return this.getId(route.parent)
      }
      return undefined;
  }
于 2016-09-14T17:03:02.223 に答える