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

.sync修饰符作用

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

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

传统父子通信

javascript 复制代码
//父组件
<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修饰符父子通信

javascript 复制代码
//父组件
<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>

欢迎指正!

相关推荐
开开心心就好29 分钟前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
Setsuna_F_Seiei3 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
百万蹄蹄向前冲5 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能
默_笙5 小时前
🏛 给 AI 配一间办公室:Harness Engineering 六大模块与它的实现
前端·javascript
linux_cfan6 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
kyriewen6 小时前
我扒了 10,221 条 JD:腾讯技术岗 75% 在要 AI
前端·人工智能·ai编程
郑州光合科技余经理7 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
+VX:Fegn08957 小时前
计算机毕业设计|基于springboot + vue旅游管理系统(源码+数据库+文档)
java·开发语言·vue.js·spring boot·课程设计
雪芽蓝域zzs8 小时前
第 7 章:双 Y 轴组合图(柱状 + 折线,看板高频场景)
vue.js·echars
IT_陈寒8 小时前
Vue的响应式让我熬到凌晨三点,原来漏了这个小细节
前端·人工智能·后端