2015-02-10 18 views
36

Ho uno stato Elenco prodotti e Modifica prodotto/Aggiungi stato nella mia app Angolare.

prodotto Dati elenco viene caricato nel controller (non pensavo che ho bisogno di risolvere da definire in config Stato) che ottiene i dati da un ngResource:

function InventoryListCtrl (myResource) { 
    var vm = this; 

    myResource.query(function (data) { 
    vm.products = data; 
    }); 
} 

su Edit Controller, dopo modifico un prodotto torno elencare stato in questo modo:

vm.product.$update().$promise; 
$state.go('productList'); 

non carica la lista con i nuovi dati sempre, mostra i vecchi dati in prima esecuzione in generale, poi dopo lo faccio secondo aggiornamento e manualmente tornare alla lista di stato inizia ad aggiornare dopo ogni aggiornamento.

Ho provato questo, ma non ha funzionato neanche:

vm.product.$update().$promise; 
$state.go('productList', {}, { reload: true }); 

Che cosa mi manca?

risposta

78

Penso che si sta caricando il nuovo stato prima che l'aggiornamento è stato completato - provare a spostare il passaggio di stato per dopo il completamento dell'aggiornamento:

vm.product.$update().then(function(){ 
    $state.go('productList', {}, { reload: true }); 
}); 
+1

È stato un errore da parte mia scrivere $ promessa dopo il metodo ngResource. La tua risposta è corretta altrimenti. Grazie – Bogac

+0

Non è quello che OP stava chiedendo, ma è qualcosa che vorrei aver imparato prima. Se si desidera ricaricare solo uno stato secondario, è necessario modificare "reload: true" per avere il nome dello stato figlio invece di true, come mostrato qui: http://stackoverflow.com/questions/25316591/angularjs-ui-router-state -reload-child-state-only/31887658 # 31887658 –

+1

Non funziona su IE (versione 11) – Jerome2606

13

penso che questo dovrebbe funzionare per l'aggiornamento dello stato attuale.

$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams 
+1

Questa dovrebbe essere la risposta accettata. Ha funzionato per me –

+2

Questo ha funzionato anche per me, racchiuso all'interno di un ng-clic come 'ng-click =" $ state.go ('dashboard', {}, {reload: true}) "' – tommymcdonald

3

Ho avuto lo stesso problema con un elenco non aggiornato dopo la modifica. Avvolgere $ state.go in una funzione di timeout $ ha risolto il mio problema.

$timeout(function(){ 
    $state.go('publishers.list', {}, { reload: true }); 
},200); 
Problemi correlati