2015-05-04 10 views
5

ho uno stato che assomiglia a qualcosa di simileui-router non vede di ricerca URL params dopo pagina aggiornare

.state('home.foo.bar', { 
    url: 'view?one&two', 
    views: { 
    'base': { 
     templateUrl: 'blah', 
     controller: 'blahCtrl' 
    } 
    }, 
    reloadOnSearch: false 
}) 

se ci si dirige verso questo stato nel mio modello con

ui-sref="home.foo.bar({one: valueOne, two: valueTwo})" 
tutto

sta bene e l'url è

.com/vista? uno = valueOne & due = valueTwo

tuttavia se aggiorno la pagina l'URL cambia in solo .com/view e né $state.params o $stateParams contiene i valori.

se aggiungo un passo risolvere in questo modo

.state('home.foo.bar', { 
    url: 'view?one&two', 
    views: { 
    'base': { 
     templateUrl: 'blah', 
     controller: 'blahCtrl' 
    } 
    }, 
    resolve: { 
    p: function($location, $stateParams, $state) { 
     console.log($location.search(), $stateParams, $state); 
     if(!$stateParams.one && !$stateParams.two { 
     $stateParams.one = $location.search().one; 
     $stateParams.two = $location.search().two; 
     } else { 
     return $location.search().one; 
     } 
    } 
    }, 
    reloadOnSearch: false 
}) 

poi quando ho inizialmente navigazione allo stato nel mio modello della dichiarazione stampe registro nulla per $location.search() ma mostra oneValue e twoValue nel $stateParams e $state.params. Quando aggiorno il suo opposto $location.search() mostra correttamente i parametri e i loro valori ma $stateParams e $state.params sono vuoti.

aggiungendo la dichiarazione if e impostando i valori risolve esplicitamente il mio errore ma questo non può funzionare come previsto può?

mi manca qualcosa di ovvio?

+0

sembra che tu debba guardare https://github.com/angular-ui/ui-router/issues/1079 –

+0

Grazie per la tua risposta, ho letto quella discussione ma non la penso è lo stesso problema a cui mi riferisco qui. Stanno tutti parlando di problemi durante la navigazione tra stati. Sto parlando di un problema quando aggiorno la pagina del browser in modo che l'app angolare nella sua interezza venga ricaricata da zero – Ir1sh

risposta

1

penso che potrebbe essere perché si sta perdendo una barra all'inizio o l'URL:

.state('home.foo.bar', { 
    url: '/view?one&two', 
    views: { 
    'base': { 
     templateUrl: 'blah', 
     controller: 'blahCtrl' 
    } 
    }, 
    reloadOnSearch: false 
}) 
+0

Grazie, ma questi stati in realtà estendono un'altra rotta di base il cui URL termina con una barra. Pensi ancora che potrebbe essere il problema? – Ir1sh

+0

Penso che questo sia il problema. Prova a mantenere la barra finale sul genitore, non sono sicuro che aggiungerà una doppia barra. Se lo fa, rimuovi la barra finale sul genitore e imposta strictMode su false. –

+0

Ma anche con una barra, sperimentiamo questo comportamento! – Yosh

0

Ho avuto lo stesso problema. Tuttavia si è scoperto che il problema non è angular. Controllare il routing sul server, potrebbe cambiare url.

0

Nel mio caso, ho interferito il regolare stateChange/statestart/statesuccess così nella mia risolvere in statesuccess ho aggiunto:

//$state.go(toState,toParams); 
//when I manupulated the regular ui-router params 
$state.go($rootScope.toState,$rootScope.toParams); 

Così ve consapevoli di passare toParams quando si modificano i parametri regolari ui-router controllo.