未捕获的TypeError:无法读取未定义的VueJS

时间:2017-03-29 22:30:43

标签: stripe-payments vuejs2 laravel-5.4

在Laravel 5.4中,我正在尝试使用Stripe进行付款。我正在关注laracast的视频,如果你有一个帐户,你可以在这里观看视频: https://laracasts.com/series/how-to-accept-payments-with-stripe/episodes/3

我将其更改为符合我的需要,并且他做的一些事情与vue版本0.3无关,除了这个问题我能解决这个问题。

我有这段代码:

data: function data() {
  return {
     stripeEmail: '',
     stripeToken: ''
  };
},
created: function created() {

  this.stripe = StripeCheckout.configure({

    key: "my_key",
    image: "https://stripe.com/img/documentation/checkout/marketplace.png",
    locale: "auto",
    token: (token) => {
      this.stripeToken = token.id;
      this.stripeEmail = token.email;

      this.$http.post('/payment', this.$data).then(response => alert('Message'));
    }
  });
},


methods: {
  buy: function buy() {
    this.stripe.open({
      name: "One Month Subscription",
      description: "Having your business displayed for one month.",
      zipcode: true,
      amount: 1000

    });
  }
}

我能够将信息输入但是一旦我点击提交它就会返回错误:

Uncaught TypeError: Cannot read property 'post' of undefined

我在bootstrap.js中安装了vue-resource:

window.Vue = require('vue');
require('vue-resource');

这解决了$ http问题,但现在我遇到了帖子问题。

如果您需要任何其他信息,请告知我们。

1 个答案:

答案 0 :(得分:1)

我认为this可能存在问题。具体而言,this中的created可能与this中的token不同。试试......这个:

created: function created() {
  var self = this;

  self.stripe = StripeCheckout.configure({
    key: "my_key",
    image: "https://stripe.com/img/documentation/checkout/marketplace.png",
    locale: "auto",
    token: (token) => {
      self.stripeToken = token.id;
      self.stripeEmail = token.email;

      self.$http.post('/payment', self.$data).then(response => alert('Message'));
    }
  });
},

我知道你正在使用箭头功能,所以不应该这样,但我还是试一试,看看它是怎么回事。