Javascript 使用“后退”按钮时$broadcast和$on-issue

Javascript 使用“后退”按钮时$broadcast和$on-issue,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我有两个视图(“索引”和“项目”) “索引”有一个只转到“项目”的按钮 “item”有一个控制器,该控制器调用广播事件的服务,并且该控制器一直侦听该事件以向对象填充值 问题:当我第一次单击按钮并转到“项目”时,我得到了正确的对象值。但是,如果我单击“上一步”按钮(返回“索引”)并再次单击同一按钮,我将转到“项”,但对象为空 MyService update: function() { $rootScope.$broadcast('event:item-updated'); console

我有两个视图(“索引”和“项目”)

“索引”有一个只转到“项目”的按钮

“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");
  });
}
<ion-view view-title="Index">
  <ion-content>
    <div>
      <button class="button" ui-sref='app.item'>
        Item
      </button>
    </div>
  </ion-content>
</ion-view>
<ion-view view-title="Item">
  <ion-content>
    <div>
      {{item.name}}
    </div>
  </ion-content>
</ion-view>
索引html

.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");
  });
}
<ion-view view-title="Index">
  <ion-content>
    <div>
      <button class="button" ui-sref='app.item'>
        Item
      </button>
    </div>
  </ion-content>
</ion-view>
<ion-view view-title="Item">
  <ion-content>
    <div>
      {{item.name}}
    </div>
  </ion-content>
</ion-view>

项目
项目html

.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");
  });
}
<ion-view view-title="Index">
  <ion-content>
    <div>
      <button class="button" ui-sref='app.item'>
        Item
      </button>
    </div>
  </ion-content>
</ion-view>
<ion-view view-title="Item">
  <ion-content>
    <div>
      {{item.name}}
    </div>
  </ion-content>
</ion-view>

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

第一次:

  • 项目控制器
  • 广播项目更新
  • 关于项目更新
第二次:

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

因此,出于某种原因,我在其他时间转到“项”时侦听器不工作。

我解决了更改声明侦听器和调用服务器的顺序的问题

.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();
}

因此,我应该在调用服务(广播事件)之前声明侦听器。

我解决了更改声明侦听器和调用服务器的顺序的问题

.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();
}

因此,我应该在呼叫服务(广播事件的服务)之前声明侦听器。

您能为您的问题提供plunker或fiddle吗?使用服务来存储项目而不是其他人回答了我的问题,这对我很有效。我应该在调用MyService.update()之前声明侦听器$on。我仍然不知道为什么它第一次起作用,其他时候不起作用。我也不知道为什么,有人对他的答案投了“否决票”…你能为你的问题提供plunker或fiddle吗?使用一个服务来存储物品,而不是有人回答了我的问题,这对我很有效。我应该在调用MyService.update()之前声明侦听器$on。我仍然不知道为什么它在第一次起作用,而在其他时候不起作用。我也不知道为什么,有人“否决”了他的答案。。。