Ionic / UI路由器在状态更改时广播事件

时间:2015-03-15 09:35:53

标签: angularjs angularjs-scope angular-ui-router ionic-framework ionic

当我从另一页(例如设置)回到初始状态(家)时,我需要重新调用函数来重新加载数据,这些调用是用cordova事件处理的(恢复,暂停,在线..) ,但在页面更改时,这些事件都不会自动调用,

我想在页面设置上做这样的事情:

.controller('gobackCtrl', ['$scope', '$rootScope', '$state',
function($scope, $rootScope, $state){

    $scope.goBack = function() {
      $state.go('app.home');
      $rootScope.$broadcast('app-resume', {});
    };

}]);

但由于控制器处于不同的状态,因此不会被调用。

我怎么能解决这个问题?

1 个答案:

答案 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);
    };

}

如果没有广播事件,我的播放器列表永远不会更新。事件有效。

侨 拉尔夫