У меня была форма заказа с угловыми полосами, и я пытаюсь обновить форму до нового Stripe Card Elements, который был представлен недавно.Угловая полоса - конвертирующая полоса Форма оплаты на полосу элементов
После удаления поля формы входного сигнала и заменить их с элементом полоса карты, моя форма выглядит следующим образом:
<form name="payment" ng-submit="vm.submit()">
<div class="row">
<label for="card-element">
Credit or debit card
</label>
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</div>
<button class="btn btn-primary" type="submit" ng-disabled="vm.submitting">Pay!</button>
<div ng-show="vm.cardError" class="row">
<div class="has-error">
<p class="help-block">* {{vm.cardError}}</p>
</div>
</div>
</form>
Ранее в Угловом, когда форма была отправлена, я был submit()
и stripeResponseHandler
от обработки контроллер. После обновления моего Угловое контроллера с новыми изменениями, мой контроллер теперь выглядит следующим образом:
function PaymentController() {
var vm = this;
var elements = stripe.elements();
var style = {
base: {
color: '#32325d',
lineHeight: '24px',
fontFamily: 'Helvetica Neue',
fontSmoothing: 'antialiased',
fontSize: '16px',
'::placeholder': {
color: '#aab7c4'
}
},
invalid: {
color: '#fa755a',
iconColor: '#fa755a'
}
};
vm.card = elements.create('card', {style: style});
vm.card.mount('#card-element');
// Handle real-time validation errors from the card Element.
vm.card.addEventListener('change', function(event) {
if (event.error) {
vm.cardError = event.error.message;
} else {
vm.cardError = '';
}
});
function submit() {
vm.cardError = '';
vm.submitting = true;
createToken();
}
// Send data directly to stripe
function createToken() {
stripe.createToken(vm.card).then(function(result) {
if (result.error) {
vm.cardError = result.error.message;
vm.submitting = false;
} else {
// Send the token to your server
stripeTokenHandler(result.token);
}
});
}
// Response Handler callback to handle the response from Stripe server
function stripeTokenHandler(token) {
vm.tokenData = {
token: token.id
};
.. Process the rest in server ...
}
}
Приведенный выше код работает, как есть. Но я смущен этим:
1) Так как Stripe теперь использует DOM Manipulation для вставки элементов карты внутри формы, делает ли это мой метод выше, как в угловом режиме? Смысл, не следует ли мне больше делать это в контроллере и вместо этого переместить их в директиву? Или это не должно быть необходимо, поскольку управляемый элемент использует stripe.elements()
.
2) Если мне нужно, чтобы они были внутри директивы, я просто не уверен, как преобразовать вышеуказанное в угловую директиву. Сначала он манипулирует элементом, монтируя его (который можно добавить к функции директивной ссылки), но позже он продолжает использовать элемент для обработчиков форм и обработчиков событий. Должен ли я делать все это внутри самой директивной ссылки, есть ли подчинения внутри директивного контроллера и манипуляции с элементами в ссылке?
Я так смущен и застрял в том, что делать здесь. Может ли кто-нибудь дать мне образец того, как я могу обратиться к этому, если я ошибаюсь?
Я использую Angular 1.5.
Привет Неель, как делает ваш HTML взгляд в этом случае? При попытке отправить данные карты я получаю сообщение об ошибке «Ошибка: мы не смогли получить данные из указанного элемента. Убедитесь, что элемент, который вы пытаетесь использовать, все еще установлен. –
@SachinKaria Я обновил свой ответ с помощью HTML-кода, который я использую. Надеюсь это поможет. – Neel