如何在VueJS方法中访问表单变量

时间:2019-04-21 07:01:30

标签: javascript vue.js

在访问表单变量时遇到麻烦。我收集了,应该允许我访问数据,但在控制台中仍然看到未定义的内容。

Vue.use(VeeValidate);

new Vue({
  el: "#app",
  data: {
    form: {
      duration: 7
    }
  },
  methods: {
      doSubmit() {
       this.$validator.validateAll().then(function(result){
        if (!result){
            //this means a validation failed, so exit without doing anything
            console.log('did not work')
            return;
        }
        console.log('did work, duration is:')
        console.log(this.form)
       });
      }
    }
});

2 个答案:

答案 0 :(得分:2)

尝试一下:

Vue.use(VeeValidate);

new Vue({
  el: "#app",
  data: {
    form: {
      duration: 7
    }
  },
  methods: {
      doSubmit() {
       var self = this;
       this.$validator.validateAll().then(function(result){
        if (!result){
            //this means a validation failed, so exit without doing anything
            console.log('did not work')
            return;
        }
        console.log('did work, duration is:')
        console.log(self.form)
       });
      }
    }
});

我认为这里的问题是,.then内部的回调函数具有自己的作用域,因此其自身的“ this”与组件中的“ this”不同。它属于另一个范围。您可以通过在回调之外执行var self = this;来保留组件的作用域。

您还可以在'then回调'中使用箭头函数(result) => { your callback logic.. }代替常规函数,然后在其中的'this'表示组件的'this',因为arrow函数没有单独的内部作用域

与箭头功能类似:

new Vue({
  el: "#app",
  data: {
    form: {
      duration: 7
    }
  },
  methods: {
      doSubmit() {
       this.$validator.validateAll().then((result) => {
        if (!result){
            //this means a validation failed, so exit without doing anything
            console.log('did not work')
            return;
        }
        console.log('did work, duration is:')
        console.log(this.form)
       });
      }
    }
});

答案 1 :(得分:0)

您必须在promise处添加一个粗箭头功能,因为您不再在vue实例上下文中使用。