【发布时间】:2017-10-13 12:49:44
【问题描述】:
我正在尝试将带有 angular 2 的 Stripe 元素与接受信用卡信息的元素卡集成。请注意,我不打算使用条带结帐,因为有几个关于如何将条带与 Angular 2 集成的示例。
declare var Stripe:any;
@Component({
selector: 'app-account',
templateUrl: './account.component.html',
styleUrls: ['./account.component.scss']
})
export class AccountComponent implements OnInit {
constructor(
private _zone: NgZone
) { }
private cardToken:any;
ngOnInit() {
if (typeof window !== 'undefined') {
this.setUpCard();
}
}
setUpCard() {
var stripe = Stripe('TEST_API_KEY');
var elements = stripe.elements();
var style = {
base: {
fontSize: '16px',
lineHeight: '24px'
}
};
var card = elements.create('card', {style: style});
card.mount('#card-element');
}
getCardData(number, month, year, cvc) {
this.getCardToken(number, month, year, cvc);
}
getCardToken(number, month, year, cvc) {
var dataObj = {"number": number, "exp_month": month, "exp_year": year, "cvc": cvc};
Stripe.card.createToken(dataObj,
(status, response) => {
this._zone.run(() => {
if (status === 200) {
this.cardToken = response;
console.log("the card token: ", this.cardToken);
}
else {
console.log("error in getting card data: ", response.error)
}
});
}
);
}
HTML
<form role="form" id="payment-form">
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</form>
当我的组件加载时,我得到这个错误:
您指定的选择器(#card-element)不适用于任何 DOM 元素 当前在页面上的。确保元素存在于 调用 mount() 之前的页面。
如何访问 Angular 2 中的 dom 元素以正常使用 Stripe?
另外,如果这会以某种方式影响 Angular 在客户端上的工作方式,我会在我的 Angular 应用程序上使用服务器端渲染。
【问题讨论】: