当前位置: 首页 > article >正文

【vue】vue中.sync修饰符如何使用--详细代码对比

.sync修饰符作用

.sync修饰符是一个语法糖,可以简化父子组件通信操作,当子组件想改变父组件数值时,父组件只需要使用.sync修饰符,子组件使用props接收属性,再使用this.$emit('update:属性', 值);就可以实现子组件更新父组件数据的操作。

以下将用el-dialog例子展示传统父子通信及使用.sync修饰符后的父子通信区别:

传统父子通信

//父组件
<template>
  <div>
    <button @click="openDialog">打开对话框</button>
<!--给子组件传递dialogVisible属性-->
    <ChildDialog :dialogVisible="dialogVisible" @updateDialogVisible="handleDialogVisibleChange"></ChildDialog>
  </div>
</template>

<script>
import ChildDialog from './ChildDialog.vue';

export default {
  components: {
    ChildDialog
  },
  data() {
    return {
      dialogVisible: false
    };
  },
  methods: {
    openDialog() {
      this.dialogVisible = true;
    },
//收到子组件传来的新值,更新dialogVisible 
    handleDialogVisibleChange(newVisible) {
      this.dialogVisible = newVisible;
    }
  }
};
</script>

//子组件
<template>
  <el-dialog :visible="dialogVisible" @close="closeDialog">
    <span>这是对话框内容</span>
  </el-dialog>
</template>

<script>
export default {
  props: {
    dialogVisible: {
      type: Boolean
    }
  },
  methods: {
    closeDialog() {
//自定义监听事件,将新值传给父组件
      this.$emit('updateDialogVisible', false);
    }
  }
};
</script>

.sync修饰符父子通信

//父组件
<template>
  <div>
    <button @click="dialogVisible = true">打开对话框</button>
<!--父组件不需要再绑定监听事件获取新值再赋给dialogVisible
    .sync修饰符可以自动完成数据更新操作,更简洁-->
    <ChildDialog :dialogVisible.sync="dialogVisible"></ChildDialog>
  </div>
</template>

<script>
import ChildDialog from './ChildDialog.vue';

export default {
  components: {
    ChildDialog
  },
  data() {
    return {
      dialogVisible: false
    };
  }
};
</script>

//子组件
<template>
  <el-dialog :visible="dialogVisible" @close="closeDialog">
    <span>这是对话框内容</span>
  </el-dialog>
  </template>

<script>
export default {
  props: {
    dialogVisible: {
      type: Boolean
    }
  },
  methods: {
    closeDialog() {
//告诉父组件哪个属性更新并且传新值
      this.$emit('update:dialogVisible', false);
    }
  }
};
</script>

欢迎指正!


http://www.kler.cn/a/404212.html

相关文章:

  • 通过vite+vue3+pinia从0到1搭建一个uniapp应用
  • 【网络安全】SSL(一):为什么需要 Keyless SSL?
  • MyBatis的resultType和resultMap区别
  • 【Maven】IDEA创建Maven项目 Maven配置
  • 【代码pycharm】动手学深度学习v2-04 数据操作 + 数据预处理
  • yolov5 数据集分享:纯干货
  • 【Word】一键批量引用论文上标——将正文字体改为上标格式
  • Flink升级程序和版本
  • word-毕业论文的每一章节的页眉单独设置为该章的题目怎么设置
  • Houdini和Blender如何使用CPU云渲染
  • 深度学习之One Stage目标检测算法2
  • 深入解析Python中的逻辑回归:从入门到精通
  • 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
  • 自然语言处理:第六十二章 KAG 超越GraphRAG的图谱框架
  • 【三合黑马指标】指标操盘技术图文教程,三线粘合抓黑马,短线买点持股辅助,通达信炒股软件指标
  • Linux13 传输层UDP和TCP协议
  • 微知-plantuml常用语法和要点以及模板?(note over、create、box,endbox、alt,else,end, autonumber)
  • qt 之 QDockWidget设置不可拖动
  • 【网络系统管理】Centos7——配置主从mariadb服务器案例(下半部分)
  • PIXHAWK(ardupilot4.52)单ic通道输出pwm
  • [QDS]从零开始,写第一个Qt Design Studio到程序调用的项目
  • ChatGPT Search VS Kimi探索版:AI搜索哪家强?!
  • 阶乘之和的尾数
  • 【2024APMCM亚太杯A题】详细解题思路
  • 三、计算机视觉_06YOLO基础知识
  • 深入理解Spring(二)