vue 之 .sync 修饰符示例详解


Posted in Javascript onApril 21, 2018

在一些情况下,我们可能会需要对一个 prop (父子组件传递数据的属性) 进行“双向绑定”。

在vue 1.x 中的 .sync 修饰符所提供的功能。当一个子组件改变了一个带 .sync 的prop的值时,这个变化也会同步到父组件中所绑定的值。

这很方便,但也会导致问题,因为它破坏了单向数据流。(数据自上而下流,事件自下而上走)

由于子组件改变 prop 的代码和普通的状体改动代码毫无区别,所以当你光看子组件的代码时,你完全不知道它合适悄悄地改变了父组件的状态。

这在 debug 复杂结构的应用时会带来很高的维护成本。于是我们在 vue 2.0 中移除了 .sync 。

但是在实际应用中,我们发现 .sync 还是有其适用之处的,比如在开发可复用的组件库时。(懵逼○△○)

我们需要做的只是  让子组件改变父组件状态的代码更容易被区分。

于是从 vue 2.3.0 开始,我们重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。他会被自动扩展为一个  自动更新父组件属性的 v-on 监听器。

例如

<child :foo.sync=”msg”></child> 就会被扩展为: <child :foo=”bar” @update:foo=”val => bar = val”>  (@是v-on的简写)

 当子组件需要更新 foo 的值的时候,他需要显示的触发一个更新事件:   this.$emit( “update:foo”, newValue );

初始状态:

 vue 之 .sync 修饰符示例详解

 点击之后的状态:

 vue 之 .sync 修饰符示例详解

 vue 之 .sync 修饰符示例详解vue 之 .sync 修饰符示例详解

原理就是父组件向子组件传递了一个函数:function (newValue) { this.msg = newValue; }

vue 之 .sync 修饰符示例详解

当使用一个对象一次性设置多个属性的时候,这个 .sync 修饰符也可以和 v-bind 一起使用。

例如:  <child  v-bind.sync = “{ message: msg, uC: uc}”></child>     (不能写成  :.sync="{*********}",否则会报错的)

这个例子会为 message 和 uC 同时添加用于更新的 v-on 监听器。

 

vue 之 .sync 修饰符示例详解vue 之 .sync 修饰符示例详解vue 之 .sync 修饰符示例详解

总结

以上所述是小编给大家介绍的vue 之 .sync 修饰符示例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
Feb 13 Javascript
jQuery实现DIV层收缩展开的方法
Feb 27 Javascript
jquery实现模拟百分比进度条渐变效果代码
Oct 29 Javascript
对Angular.js Controller如何进行单元测试
Oct 25 Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 Javascript
JS根据json数组多个字段排序及json数组常用操作
Jun 06 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 Javascript
js+canvas实现五子棋小游戏
Aug 02 Javascript
vue3.0搭配.net core实现文件上传组件
Oct 29 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
Apr 20 #Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 #Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 #jQuery
vue多页面开发和打包正确处理方法
Apr 20 #Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
Apr 20 #Javascript
Vue写一个简单的倒计时按钮功能
Apr 20 #Javascript
使用Vue如何写一个双向数据绑定(面试常见)
Apr 20 #Javascript
You might like
海贼王:最美的悬赏令!
2020/03/02 日漫
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
php基于session锁防止阻塞请求的方法分析
2017/08/07 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
2019/10/23 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
php读取sqlite数据库入门实例代码
2014/06/25 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python中关于时间和日期函数的常用计算总结(time和datatime)
2013/03/08 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python异常处理例题整理
2019/07/07 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
python实现四人制扑克牌游戏
2020/04/22 Python
keras的load_model实现加载含有参数的自定义模型
2020/06/22 Python
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
财务助理岗位职责范本
2014/10/09 职场文书
社区重阳节活动总结
2015/03/24 职场文书
小学德育工作总结2015
2015/05/12 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript