vue之.sync的详解

news/2024/7/10 0:51:27 标签: vue

文章目录

    • 1 子组件改变父组件中的变量值
      • 1.1 不使用sync
      • 1.2 使用sync
    • 2 实现父子组件双向绑定

参考:
深入理解.sync修饰符(https://www.cnblogs.com/Jingge/p/10724833.html)

1 子组件改变父组件中的变量值

1.1 不使用sync

我们知道,vue中父组件是使用v-bind(缩写为:)给子组件传入参数,然后子组件通过prop属性接收该参数。此时我们可以给子组件传入一个函数,子组件通过调用传入的函数来改变父组件中参数的值。
在这里插入图片描述

在这里插入图片描述
即主要部分如下所示

<!-- 父组件给子组件传入一个setNum函数 -->
<child :num="numParent" @setNum="(res)=> numParent = res"></child>

//子组件通过调用这个函数来实现修改父组件的状态
methods: {
    changNum(){
      this.$emit('setNum',666)
}

此时子组件只需要出发changNum函数就能执行父组件中的setNum函数从而改变父组件中numParent的值

1.2 使用sync

上述方法较复杂,使用sync可简化写法

<!-- 父组件给子组件传入一个setNum函数 -->
<child :num.sync="numParent">

//子组件通过调用这个函数来实现修改父组件的状态
methods: {
    changNum(){
      this.$emit('update:num',666)
}

上述两种方式都可以将numParent的值由222变为666,其中父组件中绑定的参数后面加了一个.sync,子组件中的事件名称被换成了update:age,如下:

  • update:固定部分,vue约定俗成的,注意必须添加update:的前缀才能正确触发事件
  • num是要修改的参数的名称,是我们手动配置的,与传入的参数名字对应起来

2 实现父子组件双向绑定

vue考虑到组件的可维护性,是不允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(通过1.1方式),通过这种间接的方式改变父组件的data,从而实现子组件改变props的值。

那么同时,vue中也提供了一种解决方案.sync修饰符(1.2方式)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/892402.html

相关文章

String源码分析之Java中的String为什么是不可变的以及replace方法源码分析

什么是不可变对象&#xff1f; 众所周知&#xff0c; 在Java中&#xff0c; String类是不可变的。那么到底什么是不可变的对象呢&#xff1f; 可以这样认为&#xff1a;如果一个对象&#xff0c;在它创建完成之后&#xff0c;不能再改变它的状态&#xff0c;那么这个对象就是不…

Snipaste工具的下载和使用

文章目录1 Snipaste下载与安装1.1 下载1.2 安装2 常见使用2.1 开始截图2.2 复制截图2.3 将截好的图缩小2.4 可同时进行多个截图放在一边2.5 获取截图中的rgb格式颜色或16进制HEX来表示颜色2.6 截图调整3 Snipaste使用时初始设置1 Snipaste下载与安装 点击进入官网进行下载 1.…

vue中将从后端获取的blob流数据转为文件

文章目录1 post方法请求后端blob数据2 前端将Blob流文件转为文件导出2.1 函数方式2.2 使用file-saver插件1 post方法请求后端blob数据 let expUrl encodeURI(urls.getList) let params {type: 0,keyword: this.search.keyword ? this.search.keyword : ,} this.$http.post(…

Java数组实现循环队列的两种方法

用java实现循环队列的方法&#xff1a; 1、增加一个属性size用来记录目前的元素个数。目的是当headrear的时候&#xff0c;通过size0还是size数组长度&#xff0c;来区分队列为空&#xff0c;或者队列已满。 2、数组中只存储数组大小-1个元素&#xff0c;保证rear转一圈之后不…

el-tabs的:lazy=“true“延时加载问题

文章目录1 问题产生原因2 使用tab-pane自带的:lazy"true"延时加载3 使用v-if"activeName item.valueCode"解决2中的问题4 柳暗花明又一村1 问题产生原因 项目中遇到一个需求&#xff0c;在一个tabs下面有三个tab-pane&#xff0c;且每个tab-pane列表及查…

Java Struts2 的请求处理流程详解

一、Struts2的处理流程&#xff1a; 客户端产生一个HttpServletRequest的请求&#xff0c;该请求被提交到一系列的标准过滤器&#xff08;Filter&#xff09;组建链中&#xff08;如ActionContextCleanUp&#xff1a;它主要是清理当前线程的ActionContext、Dispatcher,FilterDi…

小米面试题 一面

文章目录1 输出什么&#xff1f;为什么&#xff1f;2 怎么实现输出0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;。。。&#xff0c;9&#xff1f;3 事件机制讲一下4 闭包5 call&#xff0c;apply&#xff0c;bind的区别与联系(1)Function.prototype.cal…

Java用链表实现栈和队列

1、用链表实现栈 package stack; /*** * author denghb**/ class Link {public long dData;public Link next;public Link(long dd) {dData dd;}public void displayLink() {System.out.print(dData " ");} }class LinkList {private Link first;public LinkList()…