如何让我的 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.go
和reload: true
参数时,它会注销一条消息
@Daij-Djan 你能碰巧为此制作一个 plunker 吗?以上是关于如何让我的 Ionic Button 刷新所有离子视图。 (最好只重新评估一个 ng-switch)的主要内容,如果未能解决你的问题,请参考以下文章