使用后退按钮时$ broadcast和$ on issue

时间:2016-07-10 14:29:48

标签: javascript angularjs ionic-framework

我有2个观看次数('索引'和'项目')。

'指数'有一个按钮,只需转到' item'。

'项目'有一个调用广播事件的服务的控制器,控制器继续监听这个事件,用一个值填充一个对象。

问题:我第一次点击按钮,然后转到' item',我得到了正确的对象值。但是,如果我点击后退按钮(返回'索引')并再次点击同一按钮,我会转到' item'但是对象是空的。

为MyService

update: function() {
  $rootScope.$broadcast('event:item-updated');
  console.log("broadcast item updated");
  return;
}

ItemCtrl

.controller('ItemCtrl', function($scope, $state, MyService) {
  console.log("Item controller");
  MyService.update();
  $scope.item = {};
  $scope.$on('event:item-updated', function(e, status) {
    $scope.item = {"name": "My Item"};
    console.log("on item updated");
  });
}

索引HTML

<ion-view view-title="Index">
  <ion-content>
    <div>
      <button class="button" ui-sref='app.item'>
        Item
      </button>
    </div>
  </ion-content>
</ion-view>

项目HTML

<ion-view view-title="Item">
  <ion-content>
    <div>
      {{item.name}}
    </div>
  </ion-content>
</ion-view>

使用一些console.log(),我可以检查:

第一次:

  • 项目控制器
  • 广播项目已更新
  • 关于项目更新

第二次:

  • 项目控制器
  • 广播项目已更新

因此,出于某种原因,当我去“项目”时,听众没有工作。其他时间。

1 个答案:

答案 0 :(得分:0)

I solved the problem changing the order that I declared the listener and called the server.

.controller('ItemCtrl', function($scope, $state, MyService) {
  console.log("Item controller");
  $scope.item = {};
  $scope.$on('event:item-updated', function(e, status) {
    $scope.item = {"name": "My Item"};
    console.log("on item updated");
  });
  MyService.update();
}

So, I should declare the listener before call the service (that broadcast the event).