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

How to pass data from service to controller AngularJS + Stripe

我正在 ionic 应用程序中实施 Stripe 支付方式,需要从服务中获取 token

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

我在 this.open() 方法和 console.log(StripeService.open(amount)) 中尝试了 return token;,但没有成功。

我正在尝试这个 - 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);
  };

您可以使用 promises 来 return 令牌。

服务:

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

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

正如 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);
    });
};