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和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
Jun 17 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
javascript获取xml节点的最大值(实现代码)
Dec 11 Javascript
js从Cookies里面取值的简单实现
Jun 30 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
微信小程序request出现400的问题解决办法
May 23 Javascript
vue中计算属性(computed)、methods和watched之间的区别
Jul 27 Javascript
基于zepto.js实现登录界面
Oct 09 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
Nov 06 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
使用layui的router来进行传参的实现方法
Sep 06 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
js实现无缝轮播图
2020/03/09 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
简单了解python的break、continue、pass
2019/07/08 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
Python enumerate内置库用法解析
2020/02/24 Python
将世界上最美丽的摄影作品转化为艺术作品:Photos.com
2017/11/28 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
电子商务专业推荐信范文
2013/12/02 职场文书
节约用水倡议书
2014/04/16 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
AJAX学习笔记
2021/05/18 Javascript
浅谈Java父子类加载顺序
2021/08/04 Java/Android