2013-03-17 16 views
39

私は様々な画面のアプリケーションを持っています。各画面には、#,mails,contactsなどのURLが割り当てられます。AngularJSでネストされたビューを設定するにはどうすればよいですか?

私のメインのHTMLファイルには、ユーザーが選択するルートに従って更新する要素ng-viewがあります。ここまでは順調ですね。

これらの画面には、サブナビゲーションがあります。たとえば、#mailsには受信トレイと送信フォルダがあります。彼らは2つの列で自分自身を提示する:左側のサブナビゲーション、右側の適切なフォルダのメール。あなたは#mailsに移動すると、基本的受信トレイは、メールのデフォルトのサブビューになるよう

は、それは、#mails/inboxにリダイレクトするものとします。

どうすれば設定できますか?

私が現在考えることができる唯一のアプローチ(AngularJSには全く新しいので、この質問がちょっと古くなら私を許してください)は#mails/inbox#mails/sentの2つのビューを持つことです。

ルートを選択すると、これらのビューがロードされます。 #mailsを選択すると、単に#mails/inboxにリダイレクトされます。

しかし、これは、両方のビューでサブナビゲーションにng-includeを使用する必要があることを意味します。どういうわけか、これは私に間違っているように感じます。

ネストしたビューを表示すると、メール、連絡先などの画面が一番上に表示され、下のビューは受信トレイ、送信済みなどのサブビュー間で切り替わります。

どうすればこの問題を解決できますか?

+0

私の知る限りでは、NG-含め、今のように使用してへの代替手段はありません。それは将来変化する可能性があります。 – finishingmove

+5

[AngularJS - パーシャルとテンプレートの複雑なネスティング](http://stackoverflow.com/questions/12863663/angularjs-complex-nesting-of-partials-and-templates)を見て、[Angular ui-route ](https://github.com/angular-ui/ui-router)。 – Stewie

+0

うん、@スティーは正しい。 'ng-swith'は今のところ正しいアプローチです –

答えて

31

AngularJS ui-routerは、チェックアウトする

+0

手が同意します。基本的には単一のルートしか扱えないうちに、ui-routerを使用して最小限の仕事/要求であなたがしたい場所に「トンネル」することができます。 –

4

:-)別のライブラリを私の問題を解決:http://angular-route-segment.com

あなたはそれを使用する代わりに、組み込みのng-view$routeことができます。

サンプルルートの設定はこの1つのようになります。

$routeSegmentProvider. 

when('/section1',   's1.home'). 
when('/section1/prefs', 's1.prefs'). 
when('/section1/:id',  's1.itemInfo.overview'). 
when('/section1/:id/edit', 's1.itemInfo.edit'). 
when('/section2',   's2'). 

segment('s1', { 
    templateUrl: 'templates/section1.html', 
    controller: MainCtrl}). 

within(). 

    segment('home', { 
     templateUrl: 'templates/section1/home.html'}). 

    segment('itemInfo', { 
     templateUrl: 'templates/section1/item.html', 
     controller: Section1ItemCtrl, 
     dependencies: ['id']}). 

    within(). 

     segment('overview', { 
      templateUrl: 'templates/section1/item/overview.html'}). 

     segment('edit', { 
      templateUrl: 'templates/section1/item/edit.html'}). 

     up(). 

    segment('prefs', { 
     templateUrl: 'templates/section1/prefs.html'}). 

    up(). 

segment('s2', { 
    templateUrl: 'templates/section2.html', 
    controller: MainCtrl}); 
関連する問題