You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Vue组件内的input输入值传递到根实例,解决提交PHP时undefined问题

问题原因
  • 根应用实例未定义product响应式数据:调用submitProduct时访问的productForm.product不存在,productForm是Vue应用实例而非根组件实例,即便用挂载后的vm实例访问,根组件也没有在data中声明product变量,自然返回undefined。
  • 父子组件数据隔离:custom-form子组件内部的product是子组件私有的响应式数据,父组件默认无法直接访问,必须通过自定义事件或者v-model协议将子组件数据同步到父组件。
  • 输入框未实现双向绑定:仅给input绑定了:value单向属性,没有监听输入事件更新绑定值,用户输入的内容不会同步到子组件的product对象中。
  • 模板语法不规范:Vue模板中访问响应式变量不需要加this前缀,部分场景下会引发逻辑异常。
修复方案

第一步:修改根实例配置,新增响应式数据声明

var productForm = Vue.createApp ({
    // 新增根组件的响应式数据定义
    data() {
        return {
            product: {
                sku: 0,
                name: 'asdf',
                price: 0
            }
        }
    },
    methods:{
        submitProduct: function(){
            // 用this访问当前根组件实例的product
            alert(JSON.stringify(this.product))
            this.postData(this.product)
        },
        postData: function(p){
            fetch('mysql_postdata.php', {
                method: 'POST', 
                mode: "same-origin",
                credentials: "same-origin",
                headers: {
                    "Content-Type": "application/json"
                },
                body: JSON.stringify({p:p})
            })
        }
    }
})

第二步:修改自定义组件,适配v-model实现父子数据同步

productForm.component('custom-form', {
    props: ["modelValue"], // Vue3 v-model默认接收的prop名
    emits: ['update:modelValue'], // 声明要触发的同步事件
    template: `
        <label>SKU<input type="text" v-model="localProduct.sku"></label>
        <label>Name<input type="text" v-model="localProduct.name"></label>
        <label>Price<input type="text" v-model="localProduct.price"></label>
    ` ,
    computed: {
        // 用计算属性做中转,避免直接修改prop报错
        localProduct: {
            get() {
                return this.modelValue
            },
            set(val) {
                this.$emit('update:modelValue', val)
            }
        }
    },
    data: function() {
        return {
            options: ['Size', 'Weight', 'Dimensions'],
            selected: 'Size'
        }
    }
})

第三步:修改页面HTML模板,给自定义组件绑定v-model

<div id="product_form">
    <!-- 绑定v-model关联根组件product和子组件数据 -->
    <custom-form v-model="product"></custom-form>
    <button @click="submitProduct">提交数据</button>
</div>

内容的提问来源于stack exchange,提问作者v01d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:39:02