2016-11-03 10 views
0

私のエンティティの「編集」URLを作成しようとしています。したがって、例えば/my-site/entity/1/my-site/entity/1/editのように。 edit部分は、主/親エンティティのURLの状態を切り替えるために使用されます。私はangular2子ルート、コンポーネントなし

.state("home.entity.edit", { 
    url: "/edit", 
    reloadOnSearch: false 
}) 

すなわちの線に沿って何かを行うことができUI-ルータと角度1では

、これは子の状態home.entityになります。それは、親状態がそれを扱うので、ビューもコントローラも持たないでしょう。また、この状態に切り替えると、リダイレクト/コントローラの実行に関して実際には何も起こりません。

これは実際にangular2のコンポーネントルータで行うことはできますか?

答えて

0

、私はそれを実装しましたが、今のために尽くします!

1

はい、これはルータのパラメータを使用して可能です。 編集パラメータはoptional parameterです。あなたのngOnInitでは、リクエストからparamsを読み、それに応じて動作します。 これはあなたの例よりもわずかに自動化されていませんが、自由度が増します。

@Injectable() 
class EditModeActivator implements CanActivate { 
    constructor() { } 

    canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
     if (next.url[0].path === "edit") { 
      let data: any = next.parent.data; 
      data.editMode = true; 
     } 

     return true 
    } 
} 

それはハックyesです

{ 
    path: 'view/:id', 
    component: NotesViewComponent, 
    children: [ 
     { 
      path: '', 
      component: null 
     }, 
     { 
      path: 'edit', 
      canActivate: [EditModeActivator], 
      component: null 
     } 
    ], 
    data: { 
     editMode: false 
    } 
} 

次のように

瞬間のために
+0

私はオプションのパラメータをパス文字列の一部にすることを望みますが、クエリ文字列としては使用しません。 – Umair

+0

また、同じルート(/ edit /:idと/ show /:id)を同じコンポーネントに指定できますか? – Boland

+0

ルータの最新バージョンでは、パラメータがパスフラグメントの一部であり、クエリ文字列ではなく、matrix url notation(localhost:3000/heroes; id = 15; foo = foo)という名前が使用されています。かなり面白いですし、どうすればこの問題を解決することをお勧めしますか? –

関連する問題