离子使用服务在控制器之间共享数据

时间:2015-04-22 12:42:02

标签: angularjs ionic angular-services

我正在尝试在控制器之间共享数据,但是一旦在我的服务中设置了数据,它就不会再次更改。

理念

我有一页我正在调用优惠券的项目,点击优惠券中的项目会将您带到单优惠券。当我点击优惠券中的项目时,我想将商品数据保存在服务中,以便我可以在单优惠券中访问

服务

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

问题

这是第一次像你期望的那样工作,但如果我回到优惠券并点击一个新的优惠券项目,那么单一优惠券页面仍会显示旧的数据!我需要做些什么不同的事情?

2 个答案:

答案 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注入你的控制器,