2014-10-17 11 views
9

Ho iniziato a utilizzare l'ui-router di angular e sto cercando di capire come fare in modo che più URL si riferiscano a un singolo stato. Per esempio:UI-Router angolare: più URL a stato singolo

/orgs/12354/overview 
//retyrns the same pages as 
/org/overview 

mio $ fornitore di stato è attualmente impostato con qualcosa di simile, e il suo chiaro al mio modo di scivolare nella alias '/ org/Panoramica' percorso in modo tale che eredita correttamente dal 'org' genitore.

.state('org', { 
    abstract: true, 
    url: '/orgs/:orgID', 
    templateUrl: '/client/navigation/main.html' 
}) 
.state('org.overview', { 
    url: '/overview', 
    templateUrl: '/client/overview/overview.html', 
    controller: 'OverviewCtrl' 

}) 

risposta

1

Penso che sia necessario definire solo sottostati senza un url come di seguito.

.state('org', { 
    abstract: true, 
    url: '/orgs/:orgID', 
    templateUrl: '/client/navigation/main.html' 
}) 
.state('org.1', { 
    templateUrl: '/client/overview/one.html', 
    controller: 'OverviewCtrl' 
}) 
.state('org.2', { 
    templateUrl: '/client/overview/two.html', 
    controller: 'OverviewCtrl' 
}) 
.state('org.3', { 
    templateUrl: '/client/overview/three.html', 
    controller: 'OverviewCtrl' 
}) 
+1

come farebbe a sapere che "/ overview" era una route valida, dal momento che non fa parte del percorso/orgs? –

+0

Non l'ho ancora provato, ma dovresti essere in grado di mettere il controller in stato astratto, perché è lo stesso su tutti i bambini, giusto? –

+0

Sì. È corretto. – cbass

0

In primo luogo, uno stato astratto non restituisce una vista.

Inoltre, poiché si sta tentando di utilizzare il plurale orgs per la visualizzazione elenco e il singolare org per la visualizzazione dell'elemento, non è possibile utilizzare route aggiunte, che rappresentano il comportamento predefinito.

.state('org', { 
    url: '/orgs', 
    templateUrl: '/client/navigation/main.html' 
}) 
.state('org.overview', { 
    url: '^/org/:orgID/overview' 
    templateUrl: '/client/overview/overview.html', 
    controller: 'OverviewCtrl' 
}) 
6

Questo può essere ottenuto utilizzando when(). Supponiamo che questo sia lo stato a cui vuoi puntare con più url.

.state('app.home', 
    { 
    url: '/home', 
    templateUrl: 'home.html', 
    controller: 'homeCtrl' 
    }) 

In config() è possibile utilizzare when() come segue:

angular.module('myApp', []) 
    .config($urlRouterProvider){ 
     $urlRouterProvider.when(/homepage, ['$state','$match', function ($state, $match) { 
      $state.go('app.home'); 
}]); 
} 

Allo stesso modo è possibile aggiungere più URL che puntano al medesimo stato.

+0

Questa soluzione non funzionerà se si desidera avere un URL come/orderOverview di uno stato 'orderOverview' ea causa di un contesto diverso si desidera avere un altro URL come/orderHistory che dovrebbe puntare allo stesso stato 'orderOverview', ma mantenere l'URL inserito/usato nella barra degli indirizzi. –

+0

La tua soluzione causerebbe un URL modificato. –

Problemi correlati