37

I have a Product List state and Product Edit/Add state in my Angular app.

Product List data gets loaded in the controller (I didn't think I need resolve to be defined in state config) which gets data from an ngResource:

function InventoryListCtrl (myResource) {
  var vm = this;

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

On Edit Controller, after I edit a product I get back to list state like this:

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

It doesn't load list with new data always, it shows old data in first run generally, then after I do second update and manually get back to list state it starts to refresh after each update.

I've tried this, but didn't work either:

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

What am I missing?

Preview
  • 35,317
  • 10
  • 92
  • 112
Bogac
  • 3,596
  • 6
  • 35
  • 58

3 Answers3

80

I think you're loading the new state before the update has completed - try moving the state transition to after the update completion:

vm.product.$update().then(function(){
  $state.go('productList', {}, { reload: true });
});
Bogac
  • 3,596
  • 6
  • 35
  • 58
Brad Barber
  • 2,953
  • 1
  • 19
  • 18
  • 1
    It was a mistake on my part to write $promise after ngResource method. Your answer is correct otherwise. Thanks – Bogac Feb 10 '15 at 13:43
  • Not what OP was asking but it is something I wish I had learned sooner. If you want to only reload a child state you need to change "reload: true" to have the child state name instead of true as shown here: http://stackoverflow.com/questions/25316591/angularjs-ui-router-state-reload-child-state-only/31887658#31887658 – Elijah Lofgren Jul 05 '16 at 18:00
  • 1
    `$state.reload()` now works as a shorthand to the full $state.go(etc...) – DILP Sep 17 '18 at 16:08
14

i think this should work for current state refresh.

$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams
manish1706
  • 1,571
  • 24
  • 22
  • 2
    This also worked for me, wrapped inside of an ng-click such as `ng-click="$state.go('dashboard', {}, {reload: true})"` – tommymcdonald Sep 20 '16 at 16:20
3

I had the same problem with a list not refreshing after edit. Wrapping the $state.go in a $timeout function solved my problem.

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