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 相关文章推荐
jQuery 1.5 源码解读 面向中高阶JSER
Apr 05 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
onclick与listeners的执行先后问题详细解剖
Jan 07 Javascript
前端开发过程中浏览器版本的两种判定方法
Oct 30 Javascript
jQuery制作简洁的多级联动Select下拉框
Dec 23 Javascript
JavaScript实现的MD5算法完整实例
Feb 02 Javascript
js canvas实现擦除效果示例代码
Apr 26 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
记一次webpack3升级webpack4的踩坑经历
Jun 12 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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
作为PHP程序员应该了解MongoDB的五件事
2013/06/03 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
PHP实现递归无限级分类
2015/10/22 PHP
php打包压缩文件之ZipArchive方法用法分析
2016/04/30 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
JQuery UI皮肤定制
2009/07/27 Javascript
JS网页在线获取鼠标坐标值的方法
2015/02/28 Javascript
JS组件Form表单验证神器BootstrapValidator
2016/01/26 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
[12:29]《一刀刀一天》之DOTA全时刻19:蝙蝠骑士田伯光再度不举
2014/06/10 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python爬虫利用cookie实现模拟登陆实例详解
2017/01/12 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python实现彩票系统
2020/06/28 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
纯css3使用vw和vh实现自适应的方法
2018/02/09 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
统计每一学生的平均成绩
2014/06/06 面试题
长青弘远的面试题
2012/06/09 面试题
制作部班长职位说明书
2014/02/26 职场文书
小学三年级学生评语
2014/04/22 职场文书
2014年社区党建工作总结
2014/11/11 职场文书
二审答辩状格式
2015/05/22 职场文书
mysql优化
2021/04/06 MySQL
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL