ionic 使用 Service 在控制器之间共享数据
ionic use Service to share data between controllers
我正在尝试在控制器之间共享数据,但是一旦在我的服务中设置了数据,它就不会再更改。
想法
我有一个商品页面,我正在调用 优惠券,点击 优惠券 中的一个商品会带您到 单张优惠券。当我单击 coupons 中的项目时,我想将项目数据保存在服务中,以便我可以在 single-coupon[ 中访问它=12=]
服务
.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');
}
})
问题
这第一次像您预期的那样工作,但如果我返回 优惠券 并单击一个新的优惠券项目,然后 single-coupon 页面仍然显示旧数据!我需要做哪些不同的事情?
如果您的目标是在一种状态和另一种状态之间移动数据,ui-router 已经提供了这种行为:
$stateProvider.state('coupon', { url: '/coupon/:paramOne/:paramTwo', .... });
$state.go('app.page', { paramOne: 'testOne', paramTwo: 'testTwo });
然后,您可以通过将 $stateParams 注入您的控制器来检索此参数,
基本上你的服务应该有 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
方法
轻松设置数据值
优惠券Ctrl
.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();
});
我正在尝试在控制器之间共享数据,但是一旦在我的服务中设置了数据,它就不会再更改。
想法
我有一个商品页面,我正在调用 优惠券,点击 优惠券 中的一个商品会带您到 单张优惠券。当我单击 coupons 中的项目时,我想将项目数据保存在服务中,以便我可以在 single-coupon[ 中访问它=12=]
服务
.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');
}
})
问题
这第一次像您预期的那样工作,但如果我返回 优惠券 并单击一个新的优惠券项目,然后 single-coupon 页面仍然显示旧数据!我需要做哪些不同的事情?
如果您的目标是在一种状态和另一种状态之间移动数据,ui-router 已经提供了这种行为:
$stateProvider.state('coupon', { url: '/coupon/:paramOne/:paramTwo', .... });
$state.go('app.page', { paramOne: 'testOne', paramTwo: 'testTwo });
然后,您可以通过将 $stateParams 注入您的控制器来检索此参数,
基本上你的服务应该有 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
方法
优惠券Ctrl
.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();
});