使用vue的model选项实现组件通信
# 使用vue的model选项实现组件通信
了解过v-model的应该都知道,它只是一个语法糖,真正实现的形式是:
<input type="text" :value="message" @input="message = $event.target.value">
1
实现流程:
将输入框的值绑定到
message
变量上,这只是单向的,改变message
的值可以改变input
的value
,但是改变input
的输入不会改变message
。监听
input
事件,当输入类内容时改变message
变量,从而实现了双向绑定。
从官网上看到,v-model
在内部为不同的输入元素使用不同的属性并抛出不同的事件:
text
和textarea
元素使用value
属性和input
事件checkbox
和radio
使用checked
属性和change
事件select
使用value
和change
事件
那么,知道原理后,我们来实现v-model也就是双向绑定,就不难了:
子组件
<template>
<input type="text" :value="uname" @input="updateVal($event.target.value)" />
</template>
<script>
export default{
model: {
prop: 'uname',
// 随便命名事件,对应下面$emit即可
event: 'changeXXX'
},
props: {
uname: {
type: String,
default: 'tom'
}
},
methods: {
updateVal(val){
this.$emit('changeXXX',val)
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
父组件
父组件使用直接用v-model就可以了
<my-input v-model="name" value="some value" />
1
在GitHub上编辑 (opens new window)
上次更新: 2/23/2022, 5:36:03 PM