への変換ストライプ支払いフォームは、私は角ストライプチェックアウトフォームを持っていたと私は最近導入された新しい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)ストライプは、現在のフォーム内のカードの要素を挿入するためにDOM操作を使用しているので、それは角度の方法のように、私の上記の方法が間違って作るのですか?意味、コントローラでこれ以上やってはいけないのではなく、指示に移すべきでしょうか?または、操作された要素がstripe.elements()
を使用しているため、これは必要ではありません。
2私はディレクティブの内側にそれらを持っている必要があります場合は)、私はちょうど角度ディレクティブに上記を変換する方法がわからないです。これは、まず要素を操作して(指示リンク機能に追加できるように)操作しますが、その後フォーム送信およびイベントハンドラーにcard
要素を使用します。私は、ディレクティブ・コントローラーの内部でサブミットし、リンク内の要素操作を行うというディレクティブ・リンク自体の中で、これをすべて行う必要がありますか?
私はとても混乱していて、ここで何をするかに固執しています。私はそれを間違ってやっている場合、誰かが私にこれに対処する方法のサンプルを私に与えることができますか?
私は角度1.5を使用しています。
こんにちはニール、どのようにあなたのhtmlは、この場合には見えますか?カードの詳細を送信しようとするとエラーが表示されます。 'エラー:指定された要素からデータを取得できませんでした。使用しようとしている要素がまだマウントされていることを確認してください。 –
@SachinKaria私が使用しているHTMLコードで回答を更新しました。お役に立てれば。 – Neel