我有一个ng-repeat
列表转到详细信息页面(有一个后退按钮)。 $scope.items
变量是从首次加载页面时使用refreshItems()
函数发生的get请求加载的。
单击详细信息页面上的后退按钮后,您将返回到正确的页面,但列表不已刷新。我需要刷新此列表,以便加载和显示新项目。
我认为我可以简单地将“后退”按钮连接到使用ng-click
返回的ionicHistory
函数,然后调用我的refreshItems()
函数;但是,这不会重新加载第一页上的项目。
以上尝试 返回到最后一页并触发refreshItems()
功能(并且新数据已加载,我可以看到,感谢console.log()
语句,但我猜测需要重建ng-repeat。我在$scope.$apply()
以及$route.reload()
上找到了一些信息,但当我将它们放在goBack()
函数的末尾时,这些信息都没有解决问题。
controller.js
$scope.refreshItems = function() {
console.log("Refreshing items!");
$http.get('http://domain/page.aspx').then(function(resp) {
$scope.items = resp.data; console.log('[Items] Success', resp.data);
}, function(err) { console.error('ERR', err); });
};
$scope.goBack = function() {
$ionicHistory.goBack();
$scope.refreshItems();
};
主页HTML
<div class="list">
<a ng-repeat="i in items" class="item" href="#/tab/details?ID={{i.Item_ID}}">
<b>Item {{i.Item_Name}}</b>
</a>
</div>
详细信息页面上的后退按钮
<ion-nav-bar>
<ion-nav-back-button class="button-clear" ng-click="goBack();">
<i class="ion-arrow-left-c"></i> Back
</ion-nav-back-button>
</ion-nav-bar>
主页上有refresher
,调用refreshItems()
- 并正确刷新它们。当我尝试将刷新与$ionicHistory.goBack()
或$state.go()
配对时,问题肯定是肯定的。有没有一种方法可以通过编程方式调用刷新器(加载后/加载),因为直接调用刷新器调用的函数不起作用?
答案 0 :(得分:29)
在ionicConfigProvider
中设置缓存标记。在状态提供程序中禁用缓存,如下所示:
$stateProvider.state('mainPage', {
cache: false,
url : '/dashboard',
templateUrl : 'dashboard.html'
})
有关详细信息,请参阅manual。
答案 1 :(得分:10)
答案 2 :(得分:2)
我找到了解决方案!
解决方案是使用$scope.$on('$stateChangeSuccess')
功能。使用函数参数检查to / from视图,或使用$location.path()
:
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
console.log("State changed: ", toState);
if ($location.path() == "/tab/main") {
$scope.refreshItems();
}
}
答案 3 :(得分:1)
您还可以从详细信息页面广播事件,并在列表控制器中侦听此事件。