我有两个组件
我的第一个组件是这样的:
class SomeModel extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'active' => 'integer',
];
// The rest of the model code.
}
在第一个组件上,它将调用表单输入组件
表单输入组件如下:
<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)
我想在输入数据名称和提交表单时,它会得到名称
我该如何解决这个问题?
答案 0 :(得分:2)
来自官方文档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
<input>
更改为:value
上面声明的value
道具<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>