gpt4 book ai didi

javascript - 在vue组件上提交表单时如何获取值?

转载 作者:行者123 更新时间:2023-12-01 02:20:20 24 4
gpt4 key购买 nike

我有两个组件

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

<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

我希望当输入数据名称并提交表单时,它会获取名称

如何解决这个问题?

最佳答案

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

  • 知道v-model在父级中与以下内容相同:

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

所以当使用v-model时您实际上是在“发送”value Prop 和“期待”input事件。

要实现这一点,请在子组件中执行以下操作:

  • 声明 Prop value
  • 更改 <input>:value value上面声明的 prop
  • 更改 <input>发出 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>

关于javascript - 在vue组件上提交表单时如何获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49248220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com