【问题标题】:How can I get value when submit form on the vue component?在 vue 组件上提交表单时如何获得价值?
【发布时间】:2018-08-21 05:45:30
【问题描述】:

我有两个组件

我的第一个组件是这样的:

<template>
    <div>
        ...
            <form-input id="name" name="name" v-model="name">Name</form-input>
        ...
        <button type="submit" class="btn btn-primary" @click="submit">Submit</button>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                name: null
            }
        },
        methods: {
            submit() {
                console.log('submit profile')
                console.log(this.name)
            }
        }
    }
</script>

在第一个组件上,它会调用表单输入组件

表单输入组件如下:

<template>
    <div class="form-group">
        <label :for="id" class="col-sm-3 control-label"><slot></slot></label>
        <div class="col-sm-9">
            <input :type="type" :name="name" :id="id" class="form-control">
        </div>
    </div>
</template>
<script>
    export default {
        props: {
            'id': String,
            'name': String,
            'type': {
                type: String,
                default() {
                    if(this.type == 'number')
                        return 'number'
                    return 'text'
                }
            },
        }
    }
</script>

我使用这样的模式。所以表单输入组件可以在很多组件中使用

但我的问题是:提交按钮时我无法检索值

我尝试这样,但console.log(this.name) 的结果是null

我想在输入数据名称并提交表单时,它会得到名称

我该如何解决这个问题?

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component vuex


    【解决方案1】:

    来自官方文档Form Input Components using Custom Events

    • 知道父级中的v-model与:

      <child-component
         v-bind:value="something"
         v-on:input="something = $event.target.value">
      

    因此,当使用v-model 时,您实际上是在“发送”一个value 道具并“期待”一个input 事件。

    为了实现这一点,那么,在子组件中执行以下操作:

    • 声明道具value
    • &lt;input&gt; 更改为:value 上面声明的value 属性
    • 更改 &lt;input&gt; 以在更改值时向其父级发出 input 事件

    最终模板:

    <template>
        <div class="form-group">
            <label :for="id" class="col-sm-3 control-label"><slot></slot></label>
            <div class="col-sm-9">
                <input :type="type" :name="name" :id="id" class="form-control" :value="value" @input="$emit('input', $event.target.value)">
            </div>
        </div>
    </template>
    <script>
        export default {
            props: {
                'id': String,
                'name': String,
                'type': {
                    type: String,
                    default() {
                        if(this.type == 'number')
                            return 'number'
                        return 'text'
                    }
                },
                'value': String,
            }
        }
    </script>
    

    【讨论】:

    • 我想问。上面的答案是否可以用于文本区域、选择、单选按钮、复选框?所以除了输入文本
    • 看看这个:stackoverflow.com/questions/49248878/…。我为单选按钮提出了新问题。也许你可以帮助我
    • 是的,但在某些情况下会改为 @change
    • 比如&lt;select&gt;中的例子。
    • 好的,谢谢。有用。您如何看待输入类型文件?
    猜你喜欢
    • 2018-08-21
    • 1970-01-01
    • 2020-05-28
    • 2017-08-30
    • 2014-10-05
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    相关资源
    最近更新 更多