我有一个使用侧栏的Ionic应用程序。在这个侧边栏中,有一些功能可以刷新您的数据,并将这些数据发送到服务器并返回一个新的JSON对象,并将其保存到本地存储中。
我在这里遇到的问题是,当您打开侧边菜单并点击“刷新我的数据”菜单项时,数据的确会得到返回并保存在本地,但我还需要刷新或重新启动,运行我所处的任何视图/状态的控制器,以便当前视图可以使用存储中的新数据。
我的index.html:
<ion-side-menu side="left" ng-controller="sidebarController">
<ion-header-bar class="bar-positive">
<h1 class="title">Menu</h1>
</ion-header-bar>
<div class="list has-header">
<div class="item item-icon-left" ng-click="refreshData()"><i class="icon ion-refresh"></i> Refresh My Data</div>
</div>
</ion-side-menu>
<ion-side-menu-content>
<ion-nav-view></ion-nav-view>
</ion-side-menu-content>
</ion-side-menus>
正如你所看到的边栏有它自己叫sidebarController
专用控制器,你可以在这里看到:
app.controller('sidebarController', ['$scope', '$ionicSideMenuDelegate', '$storage', '$registerService', '$ionicLoading', '$ionicPopup',
function($scope, $ionicSideMenuDelegate, $storage, $registerService, $ionicLoading, $ionicPopup) {
$scope.refreshData = function() {
// Display loading modal
$ionicLoading.show({
template: 'Syncing with server...'
});
// Call the getMemberDetails service
var memberNo = $storage.get('memberNo', '');
$registerService.getMemberDetails(memberNo).
success(function(data, status, headers, config) {
// Store details to local storage
$storage.setObject('member', data.member);
// Close loading modal and sidebar
$ionicLoading.hide();
closeSidebar();
// Display success message
var alertPopup = $ionicPopup.alert({
title: 'Success',
template: 'Your data hsa been successfully sycned.'
});
}).
error(function(data, status, headers, config) {
$ionicLoading.hide();
var alertPopup = $ionicPopup.alert({
title: 'Oops',
template: 'An error occured while trying to sync with our servers. Please make sure you have a data connection.'
});
// Close the sidebar
closeSidebar();
});
}
function closeSidebar() {
if ($ionicSideMenuDelegate.isOpenLeft()) {
$ionicSideMenuDelegate.toggleLeft();
}
}
}
]);
所以基本上refreshData()
后已经运行,我需要找出我目前处于哪个状态或视图,然后重新运行该视图的控制器。有没有一个简单的方法来做到这一点?
控制器不能“重新运行”。如果您想根据视图不知道的更改更新视图,则需要使用'$ broadcast'或'$ emit',或者完全重新加载视图。 – Claies