Javascript 使用“后退”按钮时$broadcast和$on-issue
我有两个视图(“索引”和“项目”) “索引”有一个只转到“项目”的按钮 “item”有一个控制器,该控制器调用广播事件的服务,并且该控制器一直侦听该事件以向对象填充值 问题:当我第一次单击按钮并转到“项目”时,我得到了正确的对象值。但是,如果我单击“上一步”按钮(返回“索引”)并再次单击同一按钮,我将转到“项”,但对象为空 MyServiceJavascript 使用“后退”按钮时$broadcast和$on-issue,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我有两个视图(“索引”和“项目”) “索引”有一个只转到“项目”的按钮 “item”有一个控制器,该控制器调用广播事件的服务,并且该控制器一直侦听该事件以向对象填充值 问题:当我第一次单击按钮并转到“项目”时,我得到了正确的对象值。但是,如果我单击“上一步”按钮(返回“索引”)并再次单击同一按钮,我将转到“项”,但对象为空 MyService update: function() { $rootScope.$broadcast('event:item-updated'); console
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。我仍然不知道为什么它在第一次起作用,而在其他时候不起作用。我也不知道为什么,有人“否决”了他的答案。。。