我曾經有過Angular Stripe Checkout表單,我正在嘗試將我的表單更新爲最近推出的新的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
以前控制器。在更新我的Angular Controller後,我的控制器現在看起來像這樣:
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操縱在表單中插入卡片元素,這是否使我的上述方法錯誤,如在Angular方式?意思是說,我不應該在Controller中做這些事情,而是將它們移到一個指令上?或者應該沒有必要,因爲被操縱的元素使用stripe.elements()
。 2)如果我確實需要將它們放在指令內,我只是不確定如何將上述內容轉換爲角度指令。它首先通過掛載元素來操作元素(可以將其添加到指令鏈接函數中),但稍後它會繼續使用card
元素來提交表單和事件處理程序。我是否需要在指令鏈接本身內部完成所有這些操作,使指令控制器中的提交和鏈接中的元素操作?
我很困惑,在這裏做什麼卡住了。有人可以給我一個關於如何解決這個問題的例子嗎?
我正在使用Angular 1.5。
喜尼爾,請問在這種情況下,你的HTML看看嗎?提交卡片詳細信息時出現錯誤'錯誤:我們無法從指定的元素中檢索數據。請確保您嘗試使用的元素仍然安裝。' –
@SachinKaria我已經用我正在使用的HTML代碼更新了我的答案。希望這可以幫助。 – Neel