VueJs从父组件获取子表单数据

时间:2019-12-10 22:56:28

标签: vue.js vuejs2 vue-component vuejs3

我的子组件中有一个表单:

<form @submit="submitForm">
  <input type="text" v-model="textInput" />
</form>

export default {
  name: "childComp",
  data: function() {
    return {
     textInput: ""
    }
  }
}

现在从我的父组件中,我有一个按钮,我需要单击该按钮以获取子表单数据。

<button type="button" @click="getFormData()"> click </button>

export default {
  name: "ParentComp",
  data: function() {
    return {
     formData: []
    }
  },
  methods: {
    getFormData(d) {
      formData.push(d);
      console.log(d)
    }
  }
}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我使用ref=""找到了解决方案。不确定将来会变得多么复杂。

这就是我所做的。

My parent component:

<button type="button" @click="getFormData()"> click </button>
<childComp ref="childComp" />

export default {
  name: "ParentComp",
  data: function() {
    return {
     formData: []
    }
  },
  methods: {
    getFormData() {
      const data = this.$refs.childComp.submitForm()
      formData.push(data);
      console.log(data)
    }
  }
}

我的孩子部分:

<form @submit="submitForm">
  <input type="text" v-model="textInput" />
</form>

export default {
  name: "childComp",
  data: function() {
    return {
     textInput: ""
    }
  },
  submitForm() {
    return this.form;
  }
}

答案 1 :(得分:0)

即使您通过使用$ref来解决它,我还是建议您将v-model实现的功能运用到您的自定义组件中。

这是一种更干净的方法,通过这样做,您将始终可以获取表单数据,而不必在想要使用它时实际进行检索。

可以执行以下操作:

父母

<button type="button" @click="getFormData()"> click </button>
<childComp v-model="formData" />

export default {
  name: "ParentComp",
  data: function() {
    return {
     formData: {}
    }
  },
  methods: {
    getFormData() {
      console.log(this.formData)
    }
  }
}

孩子

<form>
  <input type="text" v-model="selected.text" />
</form>

export default {
  name: "childComp",
  props: ['value'],
  computed: {
    selected: {
      get() {
        return this.value;
      },
      set(value) {
        this.$emit('input', value);
      } 
    }
  }
}