理解 vue .sync修饰符

简介: 理解 vue .sync修饰符

理解 vue .sync修饰符


Vue的规定

在Vue的父子组件触发事件通信的过程中,有以下几条规则

.sync 的用法规则

  1. 组件不能修改 props 外部数据
  2. this.$emit 可以触发事件,并传参
  3. $event 可以获取 $emit 的参数

Vue 的组件在接受外部数据 props 时,Vue 规定,子组件在通过 props 接受外部数据后只有使用该数据的权利,但没有修改该属性的权利。因此 Vue 规定组件只能有权使用 props 的属性,想要改变,就必须通知该数据的真正拥有者,也就是使用该组件的父文件

.sync 修饰符的作用

简化了父子组件之间数据通信的代码书写方式,对 prop 进新双向绑定。

2.一个场景

2.1场景描述

  • 父组件有10000元
  • 子组件引用父组件的10000元
  • 子组件每次点击按钮会花掉10元
  • 子组件和父组件显示的余额发生相同的变化

2.2不使用.sync修饰符的写法

// 父组件
<template>
    <div class="app">
        App.vue 我现在有 {{total}}
        <hr>
        <!-- 这里的 update:money 是一个字符串 -->
        <!-- 通过 v-on: 绑定 update:money 事件 -->
        <!-- 使用 $evet 接收子组件传递的参数 -->
        <Child :money="total" v-on:update:money="total = $event"/>
    </div>
</template>
<script>
    import Child from "./Child.vue";
    export default {
        data() {
            return { total: 1000 };
        },
    components: { Child: Child }
    };
</script>
<style>
.app {
    border: 3px solid red;
    padding: 10px;
}
</style>
// 子组件
<template>
    <div class="child">
        {{money}}
        <!-- 通过 $emit 触发父组件上的 update:money 事件 -->
        <!-- ,第一个参数为事件名称,第二个参数为参数的返回结果 -->
        <button @click="$emit('update:money', money-10)">
            <span>花钱</span>
        </button>
    </div>
</template>
<script>
    export default {
// 接受父组件传来的 money 属性
// 子组件是不能直接修改的,需要通过 $emit 触发的方式去更改该属性
        props: ["money"]
    };
</script>
<style>
    .child {
        border: 3px solid green;
    }
</style>

点击3次,结果如图

网络异常,图片无法展示
|

2.3使用.sync修饰符的写法

// 父组件如下,子组件不变
<template>
    <div class="app">
        App.vue 我现在有 {{total}}
        <hr>
        <!-- 简化了代码书写方式 -->
        <Child :money.sync="total"/>
    </div>
</template>
<script>
    import Child from "./Child.vue";
    export default {
        data() {
            return { total: 1000 };
        },
        components: { Child: Child }
    };
</script>
<style>
    .app {
        border: 3px solid red;
        padding: 10px;
    }
</style>
复制代码

3..sync的作用

  • 上述场景中,如果不使用.sync修饰符,那么父组件就要写 <Child :money="total" v-on:update:money="total = $event"/>
  • 用了.sync修饰符,那么父组件只要写<Child :money.sync="total"/>,简化了代码
  • 而像子组件要修改props的属性,但子组件又不能直接修改,必须在修改之后通知父组件修改了props属性的场景很常见.
  • 所以.sync修饰符的存在很有必要vue文档-.sync
相关文章
|
1月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
1月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
5天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
1月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
37 1
vue学习第一章
|
1月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
29 1
|
1月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
38 1
vue学习第四章
|
1月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
27 1
|
1月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
32 1
|
1月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
1月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能