18

in my view I have a ng-switch like:

<div ng-switch on="team.isFavorite">
    <button class="button button-energized snbutton" ng-switch-when="false" ng-click="makeTeamFavorite()">
      Show team on dashboard
    </button>
    <p class="snmsg" ng-switch-default>
      This team is shown on the dashboard
    </p>
</div>

How can I make my Ionic Button refresh all ion-views.
Preferable in most just reevaluate a ng-switch, in 1 reload EVERYTHING)

What I tried in my controller:

.controller('List-PeopleCtrl', function($ionicHistory, $state, $scope, $stateParams, Teams) {
  $scope.makeTeamFavorite = function() {
      Teams.setFavoriteId($stateParams.teamId);
      $ionicHistory.clearCache();
      $state.go($state.current);
  }
  $scope.team = Teams.get($stateParams.teamId);
  $scope.team.isFavorite = Teams.getFavoriteId()==$stateParams.teamId;
  $scope.people = Teams.members($stateParams.teamId);
})

it would invalidate all caches I guess but it didn't work anyway :D

Note

  • I searched but didn't find anything to do this..
  • I don't want to mark my ion view with cache=false and opt out of all caching
  • I think this is ionic specific but it could be my general lack of knowledge concerning AngularJS :D
  • the point is it works (without clearing the cache) when I next open the view again .. just that it isn't reloaded while looking at it

EDIT: I also tried with:

      $ionicHistory.clearCache();
      $state.go($state.current, {}, { reload: true });      

or just

      $state.go($state.current, {}, { reload: true });      

NO LUCK

Community
  • 1
  • 1
Daij-Djan
  • 49,552
  • 17
  • 113
  • 135

1 Answers1

8

This doesn't seem to be ionic specific nor ng-switch specific, but seems to be ui-router specific. If I understand correctly, you want to refresh your view when you click your button and execute some data logic on Teams. I see this here

$state.go($state.current);

However, this simply won't do it for you because since your path has not changed your controller will not re-run. However, $state.go() offers additional parameters, including one we need for just this - reload. Try the following...

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

This will refresh your views and re-run your controller, so you'll see this reflected in the UI. See $state.go(to [, toParams] [, options]) docs for more information


Furthermore, if you and others would like to see this in action I have crafted two simplistic examples. The code here is by no means best-practice driven, but is indeed self-descriptive enough to demonstrate the core issue and solution.

JSFiddle Example - working - using $state.go($state.current, {}, { reload: true });

JSFiddle Example - not working - using only $state.go($state.current);

scniro
  • 16,844
  • 8
  • 62
  • 106
  • Thanks! Ill try this out tomorrow but what you say sounds quite reasonable! – Daij-Djan May 20 '15 at 21:11
  • @Daij-Djan sure let me know how it goes! Please share feedback for your findings and I'll try to help further if needed – scniro May 21 '15 at 14:38
  • also with that (which sounds reasonable) my controller isn't rerun :( I debugged the code and $state looks valid and there are no JS errors thrown – Daij-Djan May 21 '15 at 15:44
  • @Daij-Djan your controller should definitely be re-run. Put a `console.log()` at the top of your controller and it'll log out a message when you `$state.go` with the `reload: true` paramater – scniro May 21 '15 at 16:59
  • @Daij-Djan can you craft a plunker for this by chance? – scniro May 21 '15 at 17:06
  • @Daij-Djan another question for you, is `Teams.setFavoriteId` asynchronous? – scniro May 21 '15 at 17:24
  • @Daij-Djan any new progress on this by any chance? – scniro May 27 '15 at 16:04
  • @Daij-Djan I am curious if you made any progress on this. Can you share some progress details? I see the bounty period expired but I a still interested in helping you – scniro Jun 08 '15 at 16:34
  • @Daij-Djan it't been a while - do you have any interesting updates on this? Can you please accept this answer if you found helpful? – scniro Oct 18 '15 at 00:20