2013-09-22 2 views
9

Ich habe folgendes ein:Wie kann ich automatisch zum letzten ausgewählten untergeordneten Status wechseln, wenn ich nur den übergeordneten Status mit dem UI-Router anzeigen lasse?

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

Was passiert, ist, dass, wenn ein Benutzer zuvor auf die Seite /admin/xxx wird dann das nächste Mal /admin ausgewählt wird, wird es wieder die /admin/xxx Seite zurückzukehren.

Allerdings ist dies ein Chaos, da die Browser-URL /admin zeigt und der Status nicht korrekt eingestellt ist.

Gibt es eine Möglichkeit, einen untergeordneten Zustand zu speichern und dann so zu haben, dass der Benutzer beim Übergang zum letzten bekannten untergeordneten Status in den Browser wechselt und diese URL in der Browseranzeige angezeigt wird.

+0

Haben Sie OnEnter Funktionen für UI-Router angeschaut? Ich frage mich nur, ob Sie den Namen des zuletzt besuchten Admin-Child-States im lokalen Speicher speichern können, wie Sie es bei der Vorlage getan haben, und wenn es einen gibt, müssen Sie $ state.go ('last-child-state') eingeben. –

Antwort

4

tun:

myapp.config(function($urlRouterProvider){ 

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

}); 

Sehen Sie diese plunkr: http://plnkr.co/edit/oEXZpO

Edit: Neubetrachtung diese Antwort nach zwei Monaten merke ich, dass es ein wenig zu kurz ist (gelinde gesagt) auf Erklärung: So ist dieses wird die Anfrage an die zuletzt ausgewählte Admin-Seite "umleiten", so dass sie in der URL angezeigt wird. Ich habe den Plunkr aktualisiert und eine Funktion hinzugefügt, um die aktuelle URL des Dokuments anzuzeigen. So kann man sehen, dass nach dem Klicken auf/admin/die URL tatsächlich/admin/12345 ist, wenn dies die zuvor besuchte Admin-Unterseite war.

Verwandte Themen