javascript - Vuejs 在子组件中提交带有输入的表单

标签 javascript vue.js vuejs2

我有一个父组件,它是一个表单组件,它有多个包含输入字段的子组件

<template>
    <div class="form">
        <generalData v-model="input" />
        <textAreas v-model="input"/>
        <button class="btn" @click="Submit()">Submit</button>
    <div/>
</template>

<script>
export default {
    data(){
        return {
            input: {
                name: '',
                age: '',
                address: ''
                bio: ''
            }
        }
    },
    methods: {
        Submit(){
            console.log('Submitting...');
            console.log(this.input);
        }
    }
}
</script>

子组件包含文本字段

<template>
    <div class="generalData">
        <input name="name" type="text" v-bind:value="input.name" v-on:input="updateInput($event.target.value)">
        <input name="age" type="text" v-bind:value="input.age" v-on:input="updateInput($event.target.value)">
    <div/>
</template>

<script>
export default {
    props: ['input'],
    data(){
        return {

        }
    },
    methods: {
        updateInput(value){
            this.$emit('input', value);
        }
    }
}
</script>

其他子组件也一样,但值没有得到更新,我无法提交它们

最佳答案

试试这段代码:

<template>
    <div class="generalData">
        <input type="text" v-model="person.name" @change="handleChange" @input="handleInput">
        <input type="text" v-model="person.age" @change="handleChange" @input="handleInput">
        <input type="text" v-model="person.address" @change="handleChange" @input="handleInput">
        <input type="text" v-model="person.bio" @change="handleChange" @input="handleInput">
    <div/>
</template>

<script>
export default {
  props: ['value'],
  data () {
    return {
        person: {
            name: '',
            age: '',
            address: ''
            bio: ''
        }
    }
  },
  methods: {
    handleChange () {
        return this.$emit('change', this.person)
    },
    handleInput () {
        return this.$emit('input', this.person)
    },
    setCurrentValue (person) {
        this.person = person
    }
  },
  watch: {
    value (val) {
      if (!val) return
      this.setCurrentValue(val)
    }
  }
}
</script>

关于javascript - Vuejs 在子组件中提交带有输入的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54495933/

相关文章:

javascript - 如何从 vue.js 上的数据调用方法?

javascript - 如何仅向多个相同元素之一添加类

javascript - Vue 中的动态输入修饰符

javascript - 为什么动态组件中的 prop 没有反应?

vue.js - 如何从 vuetify 上的多个日期选择器获取日期?

vue.js - 尝试在 vuejs 中导出多个变量

javascript - V-text-field 自动完成值未设置 v-model 值

javascript - 获取嵌套对象值并将其放在表头上

javascript - phantomjs:document.querySelectorAll() 不适用于动态页面

vue.js - 是否可以更改 v-autocomplete 宽度?