【问题标题】:ionic use Service to share data between controllersionic 使用服务在控制器之间共享数据
【发布时间】:2023-04-10 06:03:01
【问题描述】:

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

理念

我有一页我称之为coupons的项目,点击coupons中的一个项目会将您带到一个single-coupon。当我单击 coupons 中的项目时,我想将项目数据保存在服务中,以便我可以在 single-coupon

中访问它

服务

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

问题

第一次可以正常使用,但如果我返回 coupons 并单击新的优惠券项目,则 single-coupon 页面仍会显示旧的数据!我需要做些什么不同的事情?

【问题讨论】:

  • 我看不到您将userService 服务注入控制器的位置。
  • 我刚刚添加了那部分。它看起来像:.controller('CouponsCtrl', function($scope, $state, userService)
  • 我不肯定这是个问题,但我习惯于看到服务返回一个对象。就像一个对象,其属性是共享对象return userService;?
  • 声明 userService.sharedObject = {}; 而不是 null
  • 您是如何将sharedObject 与您的视图绑定的?

标签: angularjs ionic angular-services


【解决方案1】:

如果您的目标是在一种状态和另一种状态之间移动数据,ui-router 已经提供了这种行为:

$stateProvider.state('coupon', { url: '/coupon/:paramOne/:paramTwo', .... }); 
$state.go('app.page', { paramOne: 'testOne', paramTwo: 'testTwo });

然后,你将这个参数注入到你的控制器中,

【讨论】:

  • 该对象是 json 版本的 wordpress 对象,因此它带有 20 多个属性以及多个级别的嵌套。通过查询字符串传递似乎有点多,没有?
【解决方案2】:

基本上你的服务应该有 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 & 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();
});

【讨论】:

  • .service('userService', function() { 包括在哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 2015-03-15
  • 1970-01-01
相关资源
最近更新 更多