背景交代

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

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

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

这在 debug 复杂结构的应用时会带来很高的维护成本。于是我们在 vue 2.0 中移除了 .sync 。
但是在实际应用中,我们发现 .sync 还是有其适用之处的,比如在开发可复用的组件库时。 我们需要做的只是 让子组件改变父组件状态的代码更容易被区分。
于是从 vue 2.3.0 开始,我们重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。他会被自动扩展为一个 自动更新父组件属性的 v-on 监听器。

理解

示例代码:

<comp :foo.sync="val "></comp>

会被拓展为:

<comp :foo="bar" @update:foo="val = $event"></comp>

当子组件需要更新 foo 的值的时候,他需要显示的触发一个更新事件:

this.$emit( “update:foo”, newValue );

注意:
有 .sync 修饰符的 v-bind 不能和表达式一起使用 (例如 v-bind:title.sync=”doc.title + ‘!’” 是无效的)。
v-bind与.sync一起使用时不能简写为:html:.sync="doc.title"

示例

<template><div class="details"><myComponent :show.sync='valueChild'></myComponent><button @click="changeValue">toggle</button></div>
</template><script>
import Vue from 'vue'
Vue.component('myComponent', {template: `<div v-if="show"><p>默认初始值是{{show}},所以是显示的</p><button @click.stop="closeDiv">关闭</button></div>`,props:['show'],methods: {closeDiv() {this.$emit('update:show', false); //触发 input 事件,并传入新值}}
})
export default{data(){return{valueChild:true,}},methods:{changeValue(){this.valueChild = !this.valueChild}}
}
</script>

参考资料:

https://cn.vuejs.org/v2/guide/components-custom-events.html

Vue之.sync 修饰符详解相关推荐

  1. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

  2. vue中 .sync 修饰符 个人理解

    vue中.sync修饰符有什么用 .sync 修饰符 其实就是一个语法糖 vue中 :子组件不能修改props 外部数据 vue中: $emit 可以触发事件并传参 vue中: $event可以获取 ...

  3. vue中.sync修饰符与自定义组件的v-model的使用

    .sync修饰符 有时我们需要父组件向子组件传值,并且子组件要修改父组件中的值是,我们一般会这样写 //父组件 <template>//子组件修改值 父组件注册自定义事件 传过来的参数通过 ...

  4. vue的sync修饰符

    vue 中父子组件通信的时候, 我们可能会看到 .snyc 的代码, 它实质上是一个语法糖, 不使用它我们也有解决的方案, 使用它的话,可以使我们的代码更加简洁而已. 首先, 我们实现一个功能, 在父 ...

  5. vue事件修饰符详解

    vue提倡的是在方法中只有对数据的处理,所以提供了事件修饰符用于DOM的事件处理,常用的事件修饰符有以下几个: (1). stop:阻止冒泡(通俗讲就是阻止事件向上级DOM元素传递) 点击内层div的 ...

  6. Vue 事件修饰符 详解

    本人后端程序员,由于绑页面需要使用vue,在自学的过程中不懂事件修饰符,特此请教后才理解,在这提出我的分享,忘各位大神指正. vue官网上指出: 在事件处理程序中调用 event.preventDef ...

  7. Vue.js--表单绑定数据、修饰符详解

    单行输入框 <div id="myApp"><h1>表单控件绑定</h1><input type="text" v-m ...

  8. java 修饰符 详解,详解Java修饰符

    Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: 访问控制修饰符 Java中,可以使用访问控 ...

  9. C#的方法的参数修饰符详解

    方法参数修饰 (啥也没有) 如果参数的修饰是啥也没有,那么其参数传递的方式是值传递,接受方收到的是原始数据的拷贝 out 说明了参数是引用传递. params 可变参,注意了这种修饰符针对的参数一定是 ...

  10. java final修饰符_java final修饰符详解,final修饰方法

    之前给大家讲过java final修饰符final修饰变量方面的知识,那么下面要继续给大家讲到的就是final修饰方法方面的知识,一起来了解一下吧. final修饰的方法不能被重写,假如因为一些原因, ...

最新文章

  1. MySQL之单表查询
  2. 深入理解建造者模式 ——组装复杂的实例
  3. 爬取京东商品分类和链接
  4. [leetcode]15.三数之和
  5. 第三周作业(一)单元测试
  6. 搭建Spring MVC 4开发环境八步走
  7. 力学 计算机辅助教程,实验力学课程计算机辅助教学软件
  8. 回顾 | Apache Flink x TiDB Meetup · 北京站(附 PPT 下载)
  9. Could not find modernizr-2.6.2 in any of the sources
  10. 无人驾驶中UTM坐标系GPS坐标系相关知识总结
  11. 管家婆辉煌II盘点功能操作流程
  12. 【技术贴】解决Eclipse编译java源文件之后没有生成class文件|找不到class文件
  13. 人工智能终将自我进化?排除无用功能,让自己更加完美?
  14. linux解决笔记本pwm背光,担心PWM调光屏幕闪瞎眼?联想这些ThinkPad笔记本要注意...
  15. android地图方位角_Android获取经纬度,计算距离,方位角
  16. 7.计蒜客ACM题库.A2233 结果填空:钟表
  17. 如何做好虾皮跨境电商?关于Shopee店铺快速开单的真相!
  18. Hive大总结!!!
  19. SQL中的DML、DDL以及DCL是什么?
  20. note pro 国际版_改装Redmi Note 8 Pro —一次冒险

热门文章

  1. MySql多对多关系中外键的应用
  2. [学习笔记]--ASP.Net MVC
  3. ERC20代币合约详解,附实现代码
  4. 农民伯伯 谈 接口 [interface]
  5. 在doPost,service等方法里配置字符编码过滤器,防止出现中文乱码
  6. Spark修炼之道(高级篇)——Spark源码阅读:第八节 Task执行
  7. Android之Handler,举例说明如何更新UI
  8. Rhythmk 学习 Hibernate 03 - Hibernate 之 延时加载 以及 ID 生成策略
  9. 第一章:x264视频制作meGUI工具下载
  10. 8.Docker技术入门与实战 --- 使用Dockerfile创建镜像