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命名冲突解决的五种方案分享
Mar 16 Javascript
document.getElementById获取控件对象为空的解决方法
Nov 20 Javascript
jQuery中的通配符选择器使用总结
May 30 Javascript
简单实现js选项卡切换效果
Feb 09 Javascript
JavaScript 巧学巧用
May 23 Javascript
Vue页面骨架屏注入方法
May 13 Javascript
vue v-model实现自定义样式多选与单选功能
Jul 05 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 Javascript
一些手写JavaScript常用的函数汇总
Apr 16 Javascript
小程序实现可拖动的悬浮按钮
Sep 07 Javascript
微信小程序实现星星评分效果
Nov 01 Javascript
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
关于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
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
laravel安装和配置教程
2014/10/29 PHP
Yii2单元测试用法示例
2016/11/12 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
xtree.js 代码
2007/03/13 Javascript
javascript 支持链式调用的异步调用框架Async.Operation
2009/08/04 Javascript
Javascript string 扩展库代码
2010/04/09 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
Python批量查询关键词微信指数实例方法
2019/06/27 Python
pybind11在Windows下的使用教程
2019/07/04 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
阿迪达斯越南官网:adidas越南
2020/07/19 全球购物
Why do we need Unit test
2013/01/03 面试题
研发工程师的岗位职责
2013/11/18 职场文书
工程师岗位职责规定
2014/02/26 职场文书
新闻传媒系求职信范文
2014/04/19 职场文书
健康家庭事迹材料
2014/05/02 职场文书
工作失职检讨书500字
2014/10/17 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS