如何将数据从服务传递到控制器AngularJS + Stripe

问题描述 投票:0回答:2

我正在离子应用程序中实现Stripe付款方式,需要从服务中获取token

我面临的问题是, StripeService console.log(token)正在安慰令牌,但是我需要将此令牌传递给控制器​​以做一些额外的事情。

我尝试过return token;this.open()方法和console.log(StripeService.open(amount))但是没有运气。

我正在尝试-https: //stripe.com/docs/checkout

让我知道如何从服务中获取令牌到我的控制器。

代码-

以下是我的AngularJS服务代码-

.service('StripeService', function(){

    var handler = StripeCheckout.configure({
    key: 'pk_test_6776Randomkey8990',
    image: '/img/logo.png',
    locale: 'auto'
    });

    this.open = function(amount) {
        return handler.open({
            name: 'mywebsite.com',
            description: 'Pay via stripe',
            amount: amount,
            token: function(token) {
                console.log(token);
            }
        });
    };
});

以下是我在控制器中调用服务的方法-

  $scope.clicked = function(amount) {
      StripeService.open(amount);
  };
javascript angularjs ionic-framework stripe-payments angular-services
2个回答
1
投票

您可以使用promises返回令牌。

服务:

.service('StripeService', ['$q', function($q){

    var handler = StripeCheckout.configure({
        key: 'pk_test_6776Randomkey8990',
        image: '/img/logo.png',
        locale: 'auto'
    });

    this.open = function(amount) {
        var deferred = $q.defer();
        handler.open({
            name: 'mywebsite.com',
            description: 'Pay via stripe',
            amount: amount,
            token: function(token) {
                deferred.resolve(token);
            }
        });
        return deferred.promise;
    };
}]);

控制器:

 $scope.clicked = function(amount) {
      StripeService.open(amount).then(function(token){
          console.log('token', token);
      });
  };

我没有测试,但应该可以!


1
投票

正如manzapanza所说的,您可以使用promise,我个人更喜欢这种新的表示法:

服务:

.service('StripeService', ['$q', function($q){

    var handler = StripeCheckout.configure({
    key: 'pk_test_6776Randomkey8990',
    image: '/img/logo.png',
    locale: 'auto'
    });

    this.open = function(amount) {
        return $q(function(resolve) {
            handler.open({
                name: 'mywebsite.com',
                description: 'Pay via stripe',
                amount: amount,
                token: function(token) {
                    console.log(token);
                    resolve(token);
                }
            });
        });
    };
}]);

控制器:

$scope.clicked = function(amount) {
    StripeService.open(amount).then(function(token){
        console.log('token', token);
    });
};
© www.soinside.com 2019 - 2024. All rights reserved.