【问题标题】:Ionic/UI router broadcast an event on state changeIonic/UI 路由器在状态更改时广播事件
【发布时间】:2015-03-15 09:35:52
【问题描述】:

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

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

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

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

}]);

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

我该如何解决这个问题?

【问题讨论】:

  • 它们应该被调用,因为你被广播到 rootScope
  • @JsIsAwesome 我也这么认为,但奇怪的是不是这样

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


【解决方案1】:

您所在州的听众在哪里?我也有类似的问题,我也在使用这种方法。而且效果很好:

我有两种状态:

$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);
    };

}

如果没有广播事件,我的玩家列表永远不会更新。随着事件的发生。

Ciao 拉尔夫

【讨论】:

  • 这就是我所做的。我发现错误出现在嵌套视图中,嵌套控制器奇怪地没有从另一个状态获取事件。只有父状态可以监听从另一个控制器发出的事件。感谢您的详细回答。
猜你喜欢
  • 1970-01-01
  • 2018-01-05
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多