如何让我的Ionic按钮刷新所有离子视图.(大多数情况下只需重新评估ng-switch)

Dai*_*jan 19 html javascript angularjs angular-ui-router ionic

在我看来,我有一个ng-switch喜欢:

<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>
Run Code Online (Sandbox Code Playgroud)

如何让我的Ionic按钮刷新所有离子视图.在大多数情况下,
最好只重新评估a ng-switch,在1重新加载一切)

我在我的控制器中尝试了什么:

.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);
})
Run Code Online (Sandbox Code Playgroud)

它会使我猜的所有缓存无效,但它无论如何都不起作用:D

注意

  • 我搜索但没有找到任何可以做到这一点..
  • 我不想用我的离子视图标记cache=false并选择退出所有缓存
  • 认为这是离子特异性的,但可能是我对AngularJS缺乏了解:D
  • 关键是当我再次打开视图时它可以工作(没有清除缓存)..只是在看到它时没有重新加载

编辑:我也试过:

      $ionicHistory.clearCache();
      $state.go($state.current, {}, { reload: true });      
Run Code Online (Sandbox Code Playgroud)

要不就

      $state.go($state.current, {}, { reload: true });      
Run Code Online (Sandbox Code Playgroud)

没运气

scn*_*iro 8

这似乎不是离子特定的,也不是ng-switch特定的,但似乎ui-router具体的.如果我理解正确,您需要在单击按钮并执行某些数据逻辑时刷新视图Teams.我在这看到这个

$state.go($state.current);
Run Code Online (Sandbox Code Playgroud)

但是,这根本不适合你,因为你的路径没有改变你的控制器不会重新运行.但是,$state.go()提供了额外的参数,包括我们需要的参数 - reload.试试以下......

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

这将刷新您的视图并重新运行您的控制器,因此您将在UI中看到这一点.有关更多信息,请参阅$ state.go(to [,toParams] [,options]) docs


此外,如果您和其他人希望看到这一点,我制作了两个简单的例子.这里的代码绝不是最佳实践驱动,但确实是自描述性的,足以证明核心问题和解决方案.

JSFiddle示例 - 工作 - 使用$state.go($state.current, {}, { reload: true });

JSFiddle示例 - 不工作 - 仅使用$state.go($state.current);