Vue2系列 — 修饰符.sync

.sync 修饰符以前存在于 Vue1.0 版本里,后来在2.0版本中移除了 .sync 修饰符。

但是在 2.0 发布之后的实际应用中,发现 .sync 还是有其适用之处,比如在开发可复用的组件库时。我们需要做的只是让子组件改变父组件状态的代码更容易被区分

从 2.3.0 起重新引入了 .sync 修饰符,但是这次它只是作为一个编译时的语法糖存在。它会被扩展为一个自动更新父组件属性的 v-on 监听器。

1 使用情景

需要父组件给子组件传值

子组件通过 emit 改变该值

2 原写法:

v-bind 传值 money 给子组件

并绑定事件 update:money 改变 money 值

父组件:
javascript 复制代码
<template>
  <div class="app">
    <Child
      v-bind:money="total" 
      v-on:update:money="money = $event"
    />
  </div>
</template>
子组件:
javascript 复制代码
<template>
  <div class="child">
    {{ money }}
    <button @click="$emit('update:money', money - 100)">
    </button>
  </div>
</template>

<script>
export default {
  props: ["money"],
};
</script>

3 为了方便起见,为这种模式提供一个缩写,即 .sync 修饰符:

示例:https://codesandbox.io/s/white-glade-xhj86?file=/src/App.vue

父组件:
html 复制代码
<template>
  <div class="app">
    <Child v-bind:money.sync="total" />
    <!--  或 <Child :money.sync="total" />   -->
  </div>
</template>

4 需要注意的是

  • 带有 .sync 修饰符的 v-bind 不能和表达式一起使用 (例如 v-bind:title.sync="doc.title +
    '!'" 是无效的)。取而代之的是,你只能提供你想要绑定的 property 名,类似 v-model。
  • 当我们用一个对象同时设置多个 prop 的时候,也可以将这个 .sync 修饰符和 v-bind 配合使用:
html 复制代码
<text-document v-bind.sync="doc"></text-document>

这样会把 doc 对象中的每一个 property (如 title) 都作为一个独立的 prop 传进去,然后各自添加用于更新的 v-on 监听器。

  • 将 v-bind.sync 用在一个字面量的对象上,例如 v-bind.sync="{ title: doc.title }",是无法正常工作的,因为在解析一个像这样的复杂表达式的时候,有很多边缘情况需要考虑。
相关推荐
KaMeidebaby7 分钟前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
青禾网络13 分钟前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github
仙人球部落36 分钟前
-python-LangGraph框架(3-31-LangGraph 「合并式状态管理」的原理与实践)
开发语言·javascript·python
2601_963771371 小时前
Hardening Enterprise WordPress Sites Against REST API Leaks and Bad Headers
前端·windows·word·php
蓝银草同学1 小时前
Stream 实战:博客列表排序、过滤与分页(AI 辅助学习 Java 8)
java·前端·后端
2601_957190901 小时前
飞行影院安装施工指南:场地、动感系统与影片内容配套
大数据·前端·人工智能
爱折腾的小黑牛1 小时前
简记往来批量录入功能的实现:从文本到结构化数据
前端·算法
sunfdf2 小时前
Next.js 新手从零部署到首跑实战指南
开发语言·javascript·ecmascript
YHHLAI2 小时前
Agent 智能体开发实战 · 第六课:MCP 协议 —— 让 Agent 跨进程调用工具
前端·人工智能
SmartBoyW2 小时前
前端死磕:一文彻底搞懂 JS 事件循环 (Event Loop) 与宏微任务
前端·javascript