Vue:自定义v-model数据双向绑定

简介: Vue:自定义v-model数据双向绑定

示例

age 数据单向绑定

name 数据双向绑定


<template>
    <div>
        <h3>单向绑定数据</h3>
        <p>age: {
        { age }}</p>
        <p>age: <input type="text" :value="age"></p>
        
        <h3>双向绑定数据</h3>
        <p>name: {
        {name}}</p>
        <p>name: <input type="text" :value="name" @input="name=$event.target.value"></p>
    </div>
</template>


<script>
export default {
    data(){
        return {
            age: 23,
            name: "王小二"
        }
    }
}

</script>

d23.2.png


观察代码发现,name的input 多了一个事件绑定@input="name=$event.target.value"

所以,实现数据双向绑定的原理就是:

1、数据name单向传递给input;

2、input触发事件后将name的值进行了修改

自定义v-model双向绑定

child.vue

<template>
<input type="text" :value="age" @input="change($event.target.value)">
</template>


<script>
export default {
props: ["age"],

model: {
prop: "age", // 对应的变量
event: "change" // 触发事件
},

methods: {
// 把修改后的值传递回去
change(value){
console.log(value)
this.$emit('change', value)
}
}
}

</script>


main.vue

<template>
<div>
<h3>子组件v-model示例</h3>

<p>age: { {age}}</p>

<p>age: <Child v-model="age"/></p>
</div>
</template>


<script>
import Child from './child.vue';

export default {
components: {
Child
},

data(){
return {
age: 23,
}
}
}

</script>

启动调试

$ vue serve main.vue

d23.3.png


这样就实现了自定义v-model语法

原理很简单

1、父组件给子组件传值
2、子组件值修改,触发事件修改父组件值
3、父组件再将新值传递给了子组件,子组件的接收到父组件变更的值

所以还是数据还是单向流动

参考:

  1. Vue之自定义组件的v-model
  2. vue自定义组件上的v-model如何与子组件数据绑定
            </div>
目录
相关文章
|
存储 安全 网络安全
网络信息安全管理之资产、脆弱性、威胁、风险
安全风险管理的三要素分别是资产、威胁和脆弱性,脆弱性的存在将会导致风险,而威胁主体利用脆弱性产生风险。网络攻击主要利用了系统的脆弱性。由于网络管理对象自身的脆弱性,使得威胁的发生成为可能,从而造成了不同的影响,形成了风险。
2286 0
|
Java Spring
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(下)
Spring Boot + MDC 实现全链路调用日志跟踪,这才叫优雅。。(下)
1193 0
|
SQL 前端开发 Java
面试官:SSH 和 SSM 框架有什么区别?怎么选?
面试官:SSH 和 SSM 框架有什么区别?怎么选?
635 0
|
机器学习/深度学习 自然语言处理 文字识别
算法专家解读 | 开放搜索教育搜题能力和实践
达摩院算法专家--徐光伟(昆卡)聚焦在线教育行业的拍照搜题场景,介绍如何应用开放搜索来构建更高搜索性能及搜题准确率的搜题系统,从而助力在线教育行业客户掌握更高层次用户体验的获客工具。
2295 0
算法专家解读 | 开放搜索教育搜题能力和实践
|
存储 SQL 分布式计算
DataWorks应用场景有哪些?
本文将为您介绍DataWorks的应用场景示例。
1834 0
|
MySQL 关系型数据库 数据格式
mac 设置mysql开机自启动
mac 设置mysql开机自启动1、编辑一个mysql启动文件。 在终端里面输入: sudo vi /Library/LaunchDaemons/com.mysql.mysql.plist 2、输入启动文件内容: 复制代码<?xml version="1.
3447 0