我正在尝试在控制器之间共享数据,但是一旦在我的服务中设置了数据,它就不会再次更改。
理念
我有一页我正在调用优惠券的项目,点击优惠券中的项目会将您带到单优惠券。当我点击优惠券中的项目时,我想将商品数据保存在服务中,以便我可以在单优惠券中访问
服务
.service('userService', function() {
var userService = this;
userService.sharedObject = null;
})
CouponsCtrl中的一些代码
.controller('CouponsCtrl', function($scope, $state, userService) {
$scope.couponClick = function(coupon) {
userService.sharedObject = coupon;
$state.go('single-coupon');
}
})
问题
这是第一次像你期望的那样工作,但如果我回到优惠券并点击一个新的优惠券项目,那么单一优惠券页面仍会显示旧的数据!我需要做些什么不同的事情?
答案 0 :(得分:3)
基本上你的服务应该有getter和setter,这将设置&获取数据
<强>服务强>
.service('userService', function() {
var userService = this;
userService.sharedObject = {};
userService.getCoupon = function(){
return userService.sharedObject.Coupon;
}
userService.setCoupon = function(value){
userService.sharedObject.Coupon = value;
}
});
然后,您可以使用set setCoupon
&amp; amp;轻松设置数据值。 getData by getCoupon
方法
<强> CouponsCtrl 强>
.controller('CouponsCtrl', function($scope, $state, userService) {
$scope.couponClick = function(coupon) {
userService.setCoupon(coupon);
$state.go('single-coupon');
}
});
SingleCouponCtrl (singleCouponCtrl将获取价值)
.controller('singleCouponCtrl', function($scope, $state, userService) {
//other code here
if($state.params.id == 0) //id is of coupon id
$scope.coupon = userService.setCoupon({}); //for your issue
$scope.coupon = userService.getCoupon();
});
答案 1 :(得分:1)
如果你的目标是在一个州和另一个州之间移动数据,ui-router已经提供了这种行为:
$stateProvider.state('coupon', { url: '/coupon/:paramOne/:paramTwo', .... });
$state.go('app.page', { paramOne: 'testOne', paramTwo: 'testTwo });
然后,你要检索这个参数,将$ stateParams注入你的控制器,