当我从另一页(例如设置)回到初始状态(家)时,我需要重新调用函数来重新加载数据,这些调用是用cordova事件处理的(恢复,暂停,在线..) ,但在页面更改时,这些事件都不会自动调用,
我想在页面设置上做这样的事情:
.controller('gobackCtrl', ['$scope', '$rootScope', '$state',
function($scope, $rootScope, $state){
$scope.goBack = function() {
$state.go('app.home');
$rootScope.$broadcast('app-resume', {});
};
}]);
但由于控制器处于不同的状态,因此不会被调用。
我怎么能解决这个问题?
答案 0 :(得分:0)
你的家乡的听众在哪里?我有一个类似的问题,我也在使用这种方法。它运作良好:
我有两种状态:
$stateProvider
.state('players', {
url : '/players',
controller : 'PlayersCtrl as players',
resolve : {
playersObj : function(
$localForage,
AppSettings
) {
return $localForage.getItem(AppSettings.tables.players);
}
},
templateUrl : 'players.html',
title : 'Players'
})
.state('players_detail', {
url : '/players/:playerId',
controller : 'PlayerCtrl as player',
templateUrl : 'player.html',
title : 'Player'
});
在我的PlayersCtrl中,我必须使用更新事件的监听器:
function PlayersCtrl(
$rootScope,
playersObj // resolve
) {
// ViewModel
var vm = this;
vm.users = playersObj;
$rootScope.$on('player.update', function(evt, data) {
vm.users = data; // update data on details state
});
}
在我的PlayerCtrl中,我触发更新事件:
function PlayerCtrl(
$rootScope,
$state
) {
// ViewModel
var vm = this;
vm.player_update = function() {
// some magic happens here ;)
…
// player updated successfully, use broadcast event to notify the PlayersCtrl
$state.go('players');
$rootScope.$broadcast('player.update', myUpdatedData);
};
}
如果没有广播事件,我的播放器列表永远不会更新。事件有效。
侨 拉尔夫