如何让我的 Ionic Button 刷新所有离子视图。 (最好只重新评估一个 ng-switch)

Posted

技术标签:

【中文标题】如何让我的 Ionic Button 刷新所有离子视图。 (最好只重新评估一个 ng-switch)【英文标题】:How can I make my Ionic Button refresh all ion-views. (Preferable in most just revaluate a ng-switch) 【发布时间】:2015-07-29 05:49:27 【问题描述】:

在我看来,我有一个 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>

如何让我的 Ionic Button 刷新所有离子视图。首选在大多数情况下,只需重新评估 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);
)

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

注意

我进行了搜索,但没有找到任何可以执行此操作的内容.. 我不想用 cache=false 标记我的 ion 视图并选择退出所有缓存 我认为这是离子特定的,但可能是我普遍缺乏有关 AngularJS 的知识:D 关键是当我下次再次打开视图时它可以工作(不清除缓存).. 只是在查看它时它没有重新加载

编辑: 我也试过:

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

或者只是

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

运气不好

【问题讨论】:

什么是 $ionicHistory?目前尚不清楚您要在这里做什么 ionicframework.com/docs/api/service/$ionicHistory 我认为这个问题非常具体,但这可能是我对 angularjs 的普遍缺乏了解:D 我不知道离子对不起 您的意思是使用$ionicHistory.clearCache(); 吗?如果您没有(),则该方法实际上不会被调用。 【参考方案1】:

这似乎不是离子特定的,也不是 ng-switch 特定的,但 似乎ui-router 特定的。如果我理解正确,您希望在单击按钮并在Teams 上执行一些数据逻辑时刷新视图。我在这里看到了这个

$state.go($state.current);

但是,这根本不会为您执行此操作,因为由于您的路径没有更改,您的控制器将不会重新运行。但是,$state.go() 提供了额外的参数,包括我们为此需要的参数 - reload。试试下面的...

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

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


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

JSFiddle Example - 工作 - 使用 $state.go($state.current, , reload: true );

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

【讨论】:

谢谢!我明天试试这个,但你说的听起来很合理! @Daij-Djan 一定要告诉我进展如何!请分享您对调查结果的反馈,如果需要,我会尽力提供帮助 同样(这听起来很合理)我的控制器没有重新运行:(我调试了代码并且 $state 看起来有效并且没有抛出 JS 错误 @Daij-Djan 您的控制器绝对应该重新运行。将console.log() 放在控制器顶部,当您使用$state.goreload: true 参数时,它会注销一条消息 @Daij-Djan 你能碰巧为此制作一个 plunker 吗?

以上是关于如何让我的 Ionic Button 刷新所有离子视图。 (最好只重新评估一个 ng-switch)的主要内容,如果未能解决你的问题,请参考以下文章

ionic v4中的离子按钮,文本为大写

离子物品怎么不显示?

离子 - 在另一个视图上刷新时不应用 CSS

如何在ionic2中的pop()之后重新加载离子页面

如何使用语音识别填充所有离子表单字段?

如何使用相同的 ionic html 来显示不同的图像?