我有一個使用側欄的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