如何从ng-click或控制器事件而不是表单提交中触发条带标记生成?

时间:2014-05-25 19:25:23

标签: javascript angularjs stripe-payments

我将条纹与我的角度应用程序集成在一起,如果可能的话,我希望能够更好地控制何时生成令牌,以便在用户流程中实现更多功能。更具体地说,我有几个表格(付款信息,送货地址,附加信息),我想保持单独,但我想同时处理它们。到目前为止,我使用此指令https://github.com/gtramontina/stripe-angular/blob/master/stripe-angular.js

angular.module('stripe', []).directive('stripeForm', ['$window',
function($window) {

  var directive = { restrict: 'A' };
  directive.link = function(scope, element, attributes) {
    var form = angular.element(element);
    form.bind('submit', function() {
      var button = form.find('button');
      button.prop('disabled', true);
      $window.Stripe.createToken(form[0], function() {
        var args = arguments;
        scope.$apply(function() {
          scope[attributes.stripeForm].apply(scope, args);
        });
        button.prop('disabled', false);
      });
    });
  };
  return directive;

}]);

它允许我在控制器中捕获响应但不触发标记化调用。

.controller('IndexController', function($scope, $rootScope) {
  $scope.saveCustomer = function(status, response) {
    $rootScope.user.stripeCustomerId = response.id;
    $rootScope.user.save();
  };
});

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我完全把这复杂化了。我见过的所有条纹示例都是用jQuery完成的,所以我试图将其重新发明为有角度的。当我简单地研究条纹提供的方法时,它变得容易得多。例如,标记化看起来像Stripe.card.generateToken(card,callback());如果您从文档中提取正确的属性,则卡只是一个对象。所以把它扔进一个可点击的功能不是问题。