2016-08-23 1 views
0

Das sollte einfach sein, aber ich kann es einfach nicht herausfinden.UI-Router leer Param verursacht Navigation zur falschen Route

Ich habe zwei Routen:

$stateProvider 

    .state('users', { 
     url: '/users', 
     views: {'@': { 
      templateUrl: 'templates/users.tpl.html', 
      controller: 'UsersCtrl as users' 
     }} 
    }) 
    .state('users.edit', { 
     url: '/{userId}', 
     views: {'@': { 
      templateUrl: 'templates/editUser.tpl.html', 
      controller: 'EditUserCtrl as editUser' 
     }} 
    }); 

Dies funktioniert gut, wenn Sie einen ui-Sref oder $ state.go verwenden, um den „Benutzer“ Zustand nach dem Namen zu navigieren, aber wenn Sie geben domain.com/ Benutzer/In die URL-Leiste geht es mit einem leeren Parameter userId in den Bearbeitungszustand, obwohl hinter dem Trailing Stash nichts steht.

Normalerweise wäre das kein Problem, aber wenn die EditUser-Route ohne userId ausgelöst wird, treten Konsolenfehler auf, die zu beheben wären.

Ist das leicht zu reparieren?

+0

Versuchen entweder die ersten 'url' zu'/users/'(fügen Sie einen Schrägstrich) oder ändern Sie den zweiten' url' zu '/ users/{userId} Ändern'. Ich vermute, dass einer davon den anderen auf Basis des '/ users /' -Teils des URL-Pfades verwirrt. –

+0

Die erste stoppt/Benutzer arbeiten ohne Schrägstrich und verursacht einen doppelten Schrägstrich, wenn Sie auf die zweite Route und der zweite macht die URL/Benutzer/Benutzer. Nur um klar zu sein, ich brauche es, um zur übergeordneten Route zu gehen, wenn die URL "/ users" oder "/ users /" ist, aber wenn es "/ users/so etwas" ist, dann muss es zur Bearbeitungsseite gehen. – jonhobbs

Antwort

0

Ihre Zustände Definition

$ stateProvider

sein sollte
.state('users', { 
    url: '/users', 
    views: {'@': { 
     templateUrl: 'templates/users.tpl.html', 
     controller: 'UsersCtrl as users' 
    }} 
}) 
.state('users.edit', { 
    url: '/edit/{userId}', 
    views: {'@': { 
     templateUrl: 'templates/editUser.tpl.html', 
     controller: 'EditUserCtrl as editUser' 
    }} 
}); 

Ihre untergeordnete Status-URL sollte '/ edit/{userId}' sein. Wenn wir einen Child-Status erstellen, fügt seine URL automatisch die Parent-State-URL hinzu. Wenn Ihre URL also '/ {userId}' lautet, lautet sie 'domain.com/users/{userId}'. Aus diesem Grund navigieren Sie für domain.com/users/ zum Status users.edit mit dem Parameterwert null.

https://github.com/angular-ui/ui-router/wiki/nested-states-%26-nested-views

+0

Ich verstehe, dass ich denke, aber ich habe versucht zu vermeiden, "/ bearbeiten" in den URLs, um sie sauber zu halten, z./Benutzer/michaeljackson – jonhobbs

Verwandte Themen