使用后退按钮时$broadcast和$on问题
$broadcast and $on issue when using back button
我有 2 个视图("索引"和"项目")。
"索引"有一个按钮,只需转到"项目"。
"item"有一个控制器,该控制器调用广播事件的服务,控制器不断侦听此事件以用值填充对象。
问题:在我第一次单击按钮并转到"项目"时,我得到了正确的对象值。但是,如果我单击后退按钮(返回"索引")并再次单击同一按钮,我会转到"项目"但对象为空。
我的服务
update: function() {
$rootScope.$broadcast('event:item-updated');
console.log("broadcast item updated");
return;
}
项目控制
.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>
使用一些控制台.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();
}
因此,我应该在调用服务(广播事件)之前声明侦听器。
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- window.on.scroll事件未启动
- Socket.io on Mozilla Rhino
- CSS中的游标属性似乎不适用于USB On The Go
- jQuery点击ON现在使用.load触发关闭
- JQuery.on(“keydown”)追加到页面时不工作
- 使用.on动态添加jquery/js不知道的html元素
- angularjs$valid-on-dates在firefox中报告错误
- addEventListener on NodeList
- 当我在节点上拖动鼠标时,我如何防止使用d3.ehavior.zoom().on(“缩放”,重绘)
- jQuery 1.7.2:.on()在一个页面上工作;Don’别再干别的了
- angularjs selft $broadcast and $on
- $on和$broadcast的角度
- AngularJS $broadcast $on
- $on don't catch $broadcast
- 将angularjs ng repeat指令与$scope一起使用$broadcast()/$scope$on()
- AngularJs的$emit和$broadcast以及$on issue
- 使用后退按钮时$broadcast和$on问题
- AngularJS的$Broadcast和$on不更新$scope