2013-09-22 13 views
9

私は次のように設定している:ui-routerを使用して親状態のみを表示すると、自動的に最後に選択した子状態に移動できますか?

var admin = { 
     name: 'admin', 
     url: '/admin', 
     views: { 
      'menu': { 
       templateUrl: '/Content/app/admin/partials/menu.html', 
      }, 
      'content': { 
       templateUrl: function (stateParams) { 
        var content = localStorage.getItem('ls.adminPage'); 
        if (content != null && content != "") { 
         return '/Content/app/admin/partials/' + content + '.html'; 
        } else { 
         return '/Content/app/common/partials/empty.html'; 
        } 
       } 
      } 
     } 
    }; 

    var adminContent = { 
     name: 'admin.content', 
     parent: 'admin', 
     url: '/:content', 
     views: { 
      '[email protected]': { 
       templateUrl: function (stateParams) { 
        localStorage.setItem('ls.adminPage', stateParams.content); 
        return '/Content/app/admin/partials/' + stateParams.content + '.html'; 
       }, 
      } 
     } 
    } 

何が起こることは、ユーザーが以前に/admin/xxxページに行ったときに、次回/adminはそれが再び/admin/xxxページに戻ります選択されていることです。

ブラウザのURLが/adminと表示されており、状態が正しく設定されていない場合は視覚的に混乱します。

子供の状態を保存しておき、それを持っている場合、ユーザーが親をブラウズして最後の既知の子状態に移行し、そのURLをブラウザーに表示するようにする方法はありますか?

+0

あなたはui-routerのonEnter関数を見ましたか?ちょうどあなたがテンプレートをやっているようにローカルのストレージに最後のvisted管理者の子供の州の名前を保存することができますか?ありますか?$ state.go( 'last-child-state')ですか? –

答えて

4

これを行います。

myapp.config(function($urlRouterProvider){ 

    $urlRouterProvider.when('/admin', function() { 
    var content = localStorage.getItem('ls.adminpage'); 
    if (content != null && content != "") { 
     return "/admin/" + content; 
    } 
    else { 
     return false; 
    } 
    }); 

}); 

このplunkrを参照してください:http://plnkr.co/edit/oEXZpO

編集:私は説明に(控えめに言っても)少し短いであることを認識2ヶ月後にこの答えを再訪:だからこれを最後に選択した管理ページにリクエストを実際にリダイレクトしてURLに表示します。私はPlunkrを更新し、現在のドキュメントのURLを表示する関数を追加しました。だから、/ admin /をクリックした後、これが以前に訪問したadminサブページだった場合、URLは実際には/ admin/12345になることがわかります。

関連する問題