2016-04-18 4 views
0

UIビューに設定されたデフォルトの子ビュー:https://www.thepolyglotdeveloper.com/2014/12/using-nested-states-angularjs-ui-router/Angularjs - 私は2つのビューでページを設定するには、この例に続い

私は今の場所ですべてを持っている、と私は特定のリンク、サブビューをクリックした場合期待どおりに表示されます。あなたが見ることができるように、私はapp.detailsapp.details.overviewapp.details.editを持って

$stateProvider.state('app', 
     name: 'app' 
     url: '/app' 
     abstract: true 
     templateUrl: './sections/menu/menu.tpl.html' 
    ).state('app.home', 
     name: 'home' 
     url: '/home' 
     templateUrl: './sections/Home/Home.tpl.html' 
    ).state('app.details', 
     name: 'appDetails' 
     url: '/details/:zoneID' 
     templateUrl: './sections/zoneDetails/zoneDetails.tpl.html' 
     controller: 'currentZoneFilter' 
    ).state('app.details.overview', 
     name: 'appDetailsOverview' 
     url: '/details/:zoneID' 
     templateUrl: './sections/zoneDetails/zoneDetailsOverview.tpl.html' 
    ).state('app.details.edit', 
     name: 'appDetailsEdit' 
     url: '/details/edit/:zoneID' 
     templateUrl: './sections/zoneDetails/zoneDetailsEdit.tpl.html' 
    ).state('app.setup', 
     name: 'setup' 
     url: '/setup' 
     templateUrl: './sections/setup/setup.tpl.html' 
    ).state 'app.about', 
     name: 'about' 
     url: '/about' 
     templateUrl: './sections/about/about.tpl.html' 
     controller: 'info' 

    $urlRouterProvider.otherwise 'app/home' 

はここにあなたが私の状態のすべてを見ることができている私のapp.jsファイル、です。

app.details

は親であり、ここではページのコードです:私はリンクをクリックすると

This it the parent page 
<a ui-sref="app.details.edit">Show edit</a> 
<a ui-sref="app.details.overview">Show overview</a> 
<div ui-view></div> 

、右テンプレートとページセクションが表示されます。私の質問は次のとおりです。このページにアクセスすると、デフォルトで概要が読み込まれるようにするにはどうすればよいですか?

私は.whenはあなたが別のURLを持っている場合は編集テンプレートがロードされたときに...

私のURLは概要テンプレートロードとdetails/edit/:zoneIDで、ページのdetails/:zoneIDあるべき良いと思いますことを、$urlRouterProvider.whenを見ていました、私は.whenは良いアプローチではないと思う。どんな助け?ありがとう

+0

$ urlRouterProvider.other?他の場合は – Walfrat

+0

がアプリケーションの最初のページを指定するために使用されます。それ以外の場合は、URLの状態が間違っている場合はホームページに移動する必要があります。あなたは、app.jsコード – Nick

+0

ああ真の終わりにそれを見ることができます。要約を追加してみてください:あなたの親の状態を真にし、概要状態からURLを削除してください(または空の文字列に設定してください)。ドキュメントの抽象状態を確認してください。 – Walfrat

答えて

0

終わりに、私は最終的にこれを解決しました。

私はこのようなapp.details/app.details.overview/app.details.editのための状態のURLを変更:今URLがするzoneidで始まり、それは詳細を追加したりするよう

.state('app.details', 
    name: 'appDetails' 
    url: '/:zoneID' 
    templateUrl: './sections/zoneDetails/zoneDetails.tpl.html' 
    controller: 'currentZoneFilter' 

.state('app.details.overview', 
    name: 'appDetailsOverview' 
    url: '/details' 
    templateUrl: './sections/zoneDetails/zoneDetailsOverview.tpl.html' 

.state('app.details.edit', 
    name: 'appDetailsEdit' 
    url: '/edit/day:day' 
    templateUrl: './sections/zoneDetails/zoneDetailsEdit.tpl.html' 

右側のテンプレートを表示するように編集します。

0

$ urlRouterProviderのルール関数を使用する必要があります。

$urlRouterProvider.rule(function ($injector, $location) { 
       // check if the location is the desired location then move to the //new location. 
      }); 
+0

$ urlRouterProvider.ruleチェックURLは、/:zoneIDの詳細でなければなりませんが、概要がロードされている必要があります。私は本当にそれが同じである必要があるので、URLをチェックし、一致することはできません – Nick

0

ここでは、実装に関する詳細については、https://github.com/angular-ui/ui-router/wikiのチェックについて考えています。現在のルート変更をキャンセルするevent.preventDefault()

  1. $ StateChangeStartの音を聞き、リダイレクトを行う、あなたの状態にこの試合です。
  2. コントローラを親状態に追加すると、$ state.currentの値がチェックされ、値が一致すると状態が子にリダイレクトされます(これが私のアプリケーションにあります)。

EDIT:コメントで要求されるように:

if($state.current.name != 'app.details'){ 
     $state.go('app.details.overview'); 
    } 
+0

2番目のオプションの例を追加してください。私はあなたができる親のコントローラーを既に持っているので、あなたのアプリケーションで持っているものを持っていますが、私は現在の状態をチェックすることであなたが何を意味するのかを理解しませんでした。 – Nick

+0

これはかなり単純です。あなたがparamatrized状態のparams。 – Walfrat

+0

それは動作しませんでした。私はまだオーバービューコンテンツがロードされていない私の詳細ページを持っています – Nick

関連する問題