结论:
.sync 和v-model两者的本质都是语法糖,
目的都是实现组件与外部数据的双向绑定。
v-model 是 .sync的一种体现。.sync 比较灵活;v-model较单一

.sync修饰符

父组件

<comp :foo.sync="bar" ></comp>// 等价于, 组件属性名称一致,默认事件update
<comp :foo="bar" @update:foo="val => bar = val"></comp>

子组件代码

<input :value="foo" @change="$emit("update:foo", $event.target.value)">

v-model

父组件

<input v-model="something" />// 等价于, 默认prop是value, 默认行为是input
<input v-bind:value="something" v-on:input="something = arguments[0]"/>

子组件

<input :value="value" @input="$emit('input', $event.target.value)">

可以修改默认行为

model: {prop: 'checked',event: 'change'
}

v-model实例

app.vue

<template><div><p>父组件:{{value}}</p><child v-model="value"/><!-- 两者等效value, input --><child v-bind:value="value" v-on:input="value = arguments[0]" /></div>
</template><script>
import child from './Child.vue';export default {components:{child},data(){return {value: ""}}
}
</script>

Child.vue

<template><div>子组件:<input type="text" :value="value" @input="$emit('input', $event.target.value)" /></div>
</template><script>
export default {props: ["value"]
};
</script>

运行 vue serve app.vue


修改子组件Child.vue中 model对应的属性和事件,
属性修改为 : foo
事件修改为:change

<template><div>子组件:<input type="text" :value="foo" @input="$emit('change', $event.target.value)" /></div>
</template><script>
export default {props: ["foo"],model:{props: "foo",event: "change"}
};
</script>

父组件app.vue 需要修改为

<!-- v-model写法不用变 -->
<child v-model="value"/><!-- 两者等效,需要修改下面的代码 --><child v-bind:foo="value" v-on:change="value = arguments[0]" />

.sync实例

app.vue

<template><div><p>父组件:{{value}}</p><child :foo.sync="value"/><!-- 两者等效 --><child v-bind:foo="value" v-on:update:foo="val => foo = value" /></div>
</template><script>
import child from './Child.vue';export default {components:{child},data(){return {value: ""}}
}
</script>
<template><div>子组件:<input type="text" :value="foo" @input="$emit('update:foo', $event.target.value)" /></div>
</template><script>
export default {props: ["foo"]
};
</script>

同样实现了v-model的效果

参考
Vue中.sync和v-model的区别
什么时候用组件的.sync修饰符,什么时候用自定义组件的v-model,两者有什么区别?

Vue数据双向绑定.sync 和v-model相关推荐

  1. 西安电话面试:谈谈Vue数据双向绑定原理,看看你的回答能打几分

    最近我参加了一次来自西安的电话面试(第二轮,技术面),是大厂还是小作坊我在这里按下不表,先来说说这次电面给我留下印象较深的几道面试题,这次先来谈谈Vue的数据双向绑定原理. 情景再现: 当我手机铃声响 ...

  2. vue数据双向绑定的原理

    vue数据双向绑定的原理 一 复习闭包 1 闭包含义: 当函数嵌套时,内部函数使用了外部函数的变量,就会产生闭包 当函数可以记住并访问自己的作用域时,就会产生闭包 2 闭包注意点 ① 队列里的代码执行 ...

  3. 小猿圈解析vue数据双向绑定的缺点

    vue是当今前端很流行的一种框架,但是vue也是有一定的缺陷的,你有过了解吗?下面小猿圈web前端老师就为你解析一下vue数据双向绑定的缺陷,希望对你有所帮助,下面我们一起了解一下吧. 1.vue 实 ...

  4. Vue 数据双向绑定

    1. 前言 本小节我们将介绍 Vue 中数据的双向绑定指令 v-model.v-model 的学习相对简单 我们可以用 v-model 指令在表单 . 及 元素上创建双向数据绑定.它会根据控件类型自动 ...

  5. this指向-作用域、作用域链-预解析 变量提升-Vue组件传值 父子 子父 非父子-Vue数据双向绑定原理

    目录 this指向 作用域.作用域链 预解析 变量提升 Vue组件传值 父子 子父 非父子 Vue数据双向绑定原理 1.this指向 函数的this指向 看调用.不看声明 (1)普通函数调用 ①函数名 ...

  6. Vue数据双向绑定原理(vue2向vue3的过渡)

    众所周知,Vue的两大重要概念: 数据驱动 组件系统 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于defineProperty的ge ...

  7. vue数据双向绑定原理

    vue 双向绑定原理 官网–https://cn.vuejs.org/v2/guide/reactivity.html 1.vue双向数据绑定是 通过 数据劫持 并结合 发布-订阅模式 的方法来实现的 ...

  8. vue组件双向绑定.sync修饰符的一个坑

    我们知道组件是单项的,但是有时候需要双向,这时候我们可以使用.sync修饰符,但今天遇到一个坑,一直不成功,花了半小时试出来的.... 在编程的时候我们很习惯冒号后面跟着空格.而.sync双向绑定需要 ...

  9. 利用Object.defineProperty实现Vue数据双向绑定

    body部分很简单,一个输入框和一个展示的div <div><p>你好,<input id='nickName'></p><div id=&quo ...

最新文章

  1. 如何改进你的脚本程序
  2. R语言file_path_sans_ext函数剔除文件后缀实战
  3. php中关于mysqli和mysql区别
  4. 信息存储 整数表示 原码 反码 补码 无符号数 有符号数 转换 扩展 截断
  5. 微服务架构设计模式 pdf_六种常用的微服务架构设计模式之一: 入门级模式...
  6. mysql处理存在则更新,不存在则插入(多列唯一索引)
  7. Robot Framework 使用1-环境配置及简单网站兼容性测试(转)
  8. 前端开发自学之JavaScript——显示当前时间
  9. There are multiple modules with names that only differ in ca
  10. 分享一个学习cocos-html5的链接
  11. es6 yield表达式
  12. Linux安装日文语言包,以及,TeraTerm显示乱码问题 的 解决
  13. 从今天开始阅读Java源码吧!
  14. 张量基础学习(四 张量代数运算——下)
  15. 原生Java萝卜影视4.0.5源码/完美修复完整版萝卜影视源码
  16. 01,HelloWorld入门程序
  17. 【C语言】pow函数的模拟实现(递归)
  18. php量表是什么心理量表,气质类型量表——计分标准
  19. Python3简单的爬虫项目 爬取虎牙主播名字 人气
  20. Chapter 20-APIs(应用程序编程接口)

热门文章

  1. 杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】
  2. 鸿蒙系统的体验细节,王成录透露鸿蒙系统细节:主打跨设备交互,将于年底登陆华为手机...
  3. 通过seller_nick:店铺昵称获取京东店铺所有商品接口,京东店铺所有商品API接口,API接口返回参数接入方案
  4. 【Vue五分钟】五分钟了解--Vue过渡
  5. 跟炒鸡辣鸡一起学用go写游戏后端
  6. 某公司员工分为若干类
  7. esp32使用内部flash创建文件系统
  8. 图的深度优先遍历(Depth First Search)
  9. 卧槽!女友可以生成?美国小哥生成了一个AI女友躲避催婚
  10. linux查看所有进程占用内存命令,LINUX进程内存占用查看命令