2013-09-22 5 views
9

Mam następujący skonfigurować:Jak mogę automatycznie przejść do ostatniego wybranego stanu podrzędnego, gdy wyświetlam tylko stan nadrzędny z routerem ui?

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'; 
       }, 
      } 
     } 
    } 

Co się dzieje, że gdy użytkownik wcześniej do strony /admin/xxx to następnym razem /admin wybrano będzie ponownie powrócić na stronę /admin/xxx.

Jednak wizualnie to jest bałagan jak URL przeglądarka pokazuje jak /admin a państwo nie jest prawidłowo ustawiony.

Czy istnieje sposób, w jaki mogę przechowywać stan podrzędny, a następnie mieć go tak, że gdy użytkownik przegląda do rodzica, że ​​przejdzie do ostatniego znanego stanu dziecka i mają ten adres URL pokazać w przeglądzie?

+0

Czy spojrzał na funkcjach onEnter dla UI-routerze? Zastanawiasz się tylko, czy możesz zapisać ostatnią nazwę stanu podrzędnego administrowanego administratora w pamięci lokalnej, tak jak robisz szablon, i czy istnieje jeden stan $ state.go ("stan ostatniego dziecka")? –

Odpowiedz

4

Wykonaj:

myapp.config(function($urlRouterProvider){ 

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

}); 

Zobacz ten plunkr: http://plnkr.co/edit/oEXZpO

Edit: Wracając tę ​​odpowiedź po dwóch miesiącach Zdaję sobie sprawę, że to jest trochę krótka (co najmniej) na wyjaśnienie: Więc to faktycznie "przekieruje" żądanie na ostatnią wybraną stronę administratora, aby pojawiło się w adresie URL. Zaktualizowałem Plunkr i dodałem funkcję, aby pokazać aktualny URL dokumentu. Widać więc, że po kliknięciu na/admin/adres URL będzie faktycznie/admin/12345, jeśli była to wcześniej odwiedzona strona podrzędna administratora.

Powiązane problemy