vue中v-model双向绑定原理
v-model绑定在表单上v-model绑定在表单上时,v-model就是v-bind绑定value和v-on监听input事件的结合v-model = :value + @input用v-bind和input事件模拟v-model<inputtype="text" :value="username"@input="username=$event.target.value" />原理:
v-model绑定在表单上
v-model绑定在表单上时,v-model就是v-bind绑定value和v-on监听input事件的结合
v-model = :value + @input
用v-bind和input事件模拟v-model
<input type="text" :value="username" @input="username = $event.target.value" />
原理:通过 :value 绑定 username变量,每次输入内容的时候触发input事件,
通过事件对象参数event.target.value获取输入的内容,并且把这个内容赋值给username,
从而实现双向绑定,更改username时input输入框会变,更改input时username变量会变
v-model绑定在组件上的原理
v-model绑定在组件上做了如下事情
1、在父组件内给子组件标签添加 v-model,其实是给组件绑定了 value 属性,
子组件内用prop创建value属性可以拿到父组件传下来的值,名字必须是value
2、子组件内部更改 value 的时候,必须通过$emit派发一个 input 事件,并携带最新的值
3、v-model会自动监听input事件,把接收到的最新的值同步赋值到v-model绑定的变量上
代码实现
父组件内操作,注册子组件并使用
<子组件标签 v-model="父组件定义的变量值" />
在子组件内操作
<template>
<p>子组件库存: {{ value }}</p>
<button @click="addFn">增加+1</button>
</template>
<script>
export default {
props: {
value: {
type: Number,
default: 0
}
},
methods: {
addFn() {
this.$emit('input', this.value + 1)
}
}
}
</script>
这样后每次点击按钮的时候,库存就会加1,并且把变更后的值传递并赋值给父组件,
父组件v-model绑定的变量就会改变。
更多推荐
所有评论(0)