1、为什么会有.sync这样的修饰符呢?

sync:同步,同时,使同步

vue官网的解释:在有些情况下,我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件都没有明显的变更来源。

个人理解:首先一个组件上只能定义一个v-model,如果其他prop也要实现双向绑定的效果该怎么办呢? 简单的方法是子组件向父组件发送一个事件,父组件监听该事件,然后更新prop,.sync就是这种方法的简化。

用法在子组件中以 update:myPropName 的模式触发事件取而代之。父组件中:myPropName.sync

先看一个简单的示例:

示例如下:

没有使用.sync的代码

子组件:

<template><div><p>子组件:{{title}}</p><button @click="change1">点击我,改变title值</button></div>
</template>
<script>
export default {props:{title:{type:String}},methods:{change1(){this.$emit('change','加油');}}
};
</script>

父组件:

<template><div><p>父组件:{{title}}</p><child2 :title="title" @change="getChange"></child2></div>
</template>
<script>
import child2 from "./child2.vue";
export default {components: {child2},data() {return {title: "努力着,从不放弃"};},methods: {getChange(value) {this.title = value;}}
};
</script>

点击按钮之后

使用.sync的代码之后,简化上面的流程

子组件:

<template><div><p>子组件:{{title}}</p><button @click="change1">点击我,改变title值</button></div>
</template>
<script>
export default {props:{title:{type:String}},methods:{change1(){this.$emit('update:title','加油');}}
};
</script>

父组件:

<template><div><p>父组件:{{title}}</p><child2 :title.sync="title"></child2></div>
</template>
<script>
import child2 from "./child2.vue";
export default {components: {child2},data() {return {title: "努力着,从不放弃"};}
};
</script>

展示的结果和上面是一样的。

说一下.sync实际应用场景常用于关闭弹框组件
模拟的弹窗场景示例如下:
子组件:

<template><div v-if="ifshow"><p>子组件:{{title}}</p><button @click="close">关闭弹窗</button></div>
</template>
<script>
export default {props:{title:{type:String},ifshow:{type:Boolean}},methods:{close(){this.$emit('update:ifshow',false);}}
};
</script>

父组件:

<template><div><p>父组件:{{title}}  <button @click="show">展示弹窗</button></p><child2 :title="title" :ifshow.sync='ifshow'></child2></div>
</template>
<script>
import child2 from "./child2.vue";
export default {components: {child2},data() {return {title: "努力着,从不放弃",ifshow:false};},methods: {show(){this.ifshow = true;}}
};
</script>

展示效果如下:

点击展示按钮: 然后点击关闭,子组件就不展示了。

以上就是对.sync做的一个总结。

中间有一个小插曲,运行的时候报错了:

翻译成中文:属性或方法“show”不是在实例上定义的,而是在渲染期间引用的。通过初始化该属性,确保该属性是反应性的,无论是在data选项中,还是在基于类的组件中。

为什么会报这个错呢,说明show方法没有被读取到,或者是没有定义,看了一下show没有拼错。检查了好一会,发现,我在定义方法的时候,把methods写成了medthods,导致方法都读取不到,找对解决问题的方向很重要。

改成methods之后就ok了。以此为戒!要细心!

温馨小提示:v-on="{a: f()}"等价于v-on:a="f()"

深入理解.sync修饰符相关推荐

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

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

  2. angular移除事件绑定事件绑定_Vue.js子组件利用事件向父组件传输数据,以及sync修饰符和双向绑定...

    在Vue.js的组件中,prop是"单向绑定"的,数据只能从父组件传输到子组件.Vue文档中的说了这样做的原因: 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑 ...

  3. Vue2.3.0+使用.sync修饰符对prop进行双向绑定/子组件同步prop到父组件绑定的值

    vue2.3.0+使用.sync修饰符对prop进行双向绑定 背景.概念: 在一些情况下,我们可能会需要对一个 prop 进行"双向绑定".事实上,这正是 Vue 1.x 中的.s ...

  4. Vue v-model 指令详解以及sync修饰符的使用场景(结合父子组件通信案例)

    参考Vue官方文档 一.需求如下: 二.代码如下 三.分步解析: 父组件给子组件传值: 子组件给父组件传值: 四.sync修饰符的使用 vue.js官方文档 如果已经使用了v-model双向绑定了一个 ...

  5. vue组件双向绑定.sync修饰符的一个坑

    我们知道组件是单项的,但是有时候需要双向,这时候我们可以使用.sync修饰符,但今天遇到一个坑,一直不成功,花了半小时试出来的.... 在编程的时候我们很习惯冒号后面跟着空格.而.sync双向绑定需要 ...

  6. vue子组件通过.sync修饰符修改props属性

    在vue子组件中,如果我们直接修改props中的属性,会报错: Avoid mutating a prop directly since the value will be overwritten w ...

  7. vue的sync修饰符

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

  8. .sync修饰符的原理和使用

    .sync 修饰符的作用就是实现父子组件数据的双向绑定,与v-model类似 父组件内容: 子组件内容:  通过点击按钮改变父组件中的值 num和sum 开始时组建显示内容: 点击按钮后显示的内容: ...

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

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

最新文章

  1. nginx负载均衡以及反向代理
  2. 教你识别:虚拟内存和物理内存的区别
  3. 《Qt数据类型》--QByteArray,QString,int,hex之间的转化
  4. UA MATH571B 试验设计 总结 判断试验类型的例题
  5. Ganglia的配置,用于监测系统和Hadoop性能
  6. Go sync.WaitGroup的用法
  7. 3409: [Usaco2009 Oct]Barn Echoes 牛棚回声
  8. flowable 任务节点多实例使用
  9. 通过QEMU-GuestAgent实现从外部注入写文件到KVM虚拟机内部
  10. 换SSD硬盘,重装系统,一阵子忙乱
  11. php生成超链接完整代码_PHP自动把网站自动添加超链接怎么写
  12. 57. Attribute specified 属性
  13. LightMapping和LightProbe
  14. fir.im Weekly - 如何打造真正的工程师文化
  15. MyBatis中foreach传入参数为Poji装饰类,list、数组的不同写法
  16. Response.AddHeader使用实例
  17. 干货!自监督学习在推荐系统中的应用
  18. 特征分析 | MATLAB实现NCA(近邻成分分析)自定义损失函数
  19. 算法实践——数独的基本解法
  20. 小李飞刀系列之Oracle EBS期间平均成本(PAC)--生产成本计算(一)基础

热门文章

  1. android电视传屏软件下载,MAXHUB传屏助手
  2. [CF1290F] Making Shapes
  3. Python-下载MP3
  4. oracle表分区四种方式的含义,Oracle表分区详细说明
  5. 基于人工智能与大数据的城市治安防控体系建设方案-2022-01版
  6. [C++] 左值和右值
  7. 读IC封装基础与工程设计实例记录一
  8. studio和solo哪个好_图文评测曝光beatsstudio3和solo3哪个好?区别如何?真相吐槽内情...
  9. matlab 不允许函数定义,求解决: 错误: 此上下文中不允许函数定义。
  10. Python抢票程序优化,可以选择车次和座次