vue3中sync修饰符的使用详解

 更新时间:2023年10月07日 09:45:41   作者:CamphorBloom  
.sync修饰符是Vue中用于实现子组件修改父组件传递的props值并更新到父组件的功能,它实际上是一个语法糖,将子组件的props绑定到一个名为update:propName的自定义事件上,本文给大家介绍了vue3中sync修饰符的使用,需要的朋友可以参考下

props是子组件与父组件进行通信的常用方式,使用步骤主要有以下几个:   

 1. 在子组件中定义props要从父组件接收的变量(变量的类型必须写明,默认值可选)

// 这里以 document.vue 子组件为例
// 通过 defineProps 宏的方式声明, props 接受父组件传递过来的数据
const props = defineProps({
  title: {
    type: String,
    default: 'Default title'
  }
})

2. 父组件引入子组件,并绑定父组件的变量传递给子组件。

// 这里 App.vue 为父组件
import document from './components/document.vue'
const title = ref("标题")
// ......
<document :title="title"></document>

3. 在子组件中分别打印props和使用props中的数据。

console.log("props: ", props);
 // ......
// 在template 模板中不需要通过props.title方式获取
<template>
<div> {{ title }} </div>
</template>

子组件欲更改父组件数据时,首先必须明确一个原则:谁的数据谁来维护,不能直接通过props来修改(虽说可以改变,但不允许,破坏了数据单向流)。官方给我们提供了emits去处理子组件向父组件数据通信的问题,分为以下几个步骤:

1. 在子组件中定义emits要向父组件触发的事件(事件可以有多个)。

// 通过 defineEmits 宏的方式声明
const emit = defineEmits(['update:title'])

2. 子组件手动触发事件,并传入更新的数据。

// document.vue
<button @click="changeTitle()">click</button>
// ......
const changeTitle = (newTitle = “新标题”) => {
  emit('update:title', newTitle)
}

3. 父组件在子组件标签中绑定同名的事件,并赋值为更新后的数据。

// App.vue
<document :title="title" @update:title="(v) => title = v"></document>

这里的事件名“update:eventName”为固定写法,vue于v2.3引入sync修饰符,省去了在组件标签内写@update函数。

使用sync修饰符:

// App.vue
 <document :title.sync="title" @change-title="(v) => title = v"></document>
<!--    <document :title.sync="title" @changeTitle="(v) => title = v"></document>-->
<!--    <document :title.sync="title" @ChangeTitle="(v) => title = v"></document>-->
// document.vue 添加 changeTitle 事件
const emit = defineEmits(['update:title', 'changeTitle'])

另外这里绑定的changeTitle事件为kebab-case(短横线命名),驼峰和大驼峰命名均可。

到此这篇关于vue3中sync修饰符的使用详解的文章就介绍到这了,更多相关vue3 sync修饰符使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解vue-router基本使用

    详解vue-router基本使用

    本篇文章主要介绍了详解vue-router基本使用,详细的介绍了vue-router的概念和用法,有兴趣的可以了解一下。
    2017-04-04
  • vue+canvas实现移动端手写签名

    vue+canvas实现移动端手写签名

    这篇文章主要为大家详细介绍了vue+canvas实现移动端手写签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • vue如何使用window.open打开页面并拼接参数

    vue如何使用window.open打开页面并拼接参数

    这篇文章主要介绍了vue如何使用window.open打开页面并拼接参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue中echarts自动轮播tooltip问题

    vue中echarts自动轮播tooltip问题

    这篇文章主要介绍了vue中echarts自动轮播tooltip问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 关于Vue中$refs的探索浅析

    关于Vue中$refs的探索浅析

    这篇文章主要给大家介绍了关于Vue中$refs的探索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • vue.js在标签属性中插入变量参数的方法

    vue.js在标签属性中插入变量参数的方法

    这篇文章主要介绍了vue.js在标签属性中插入变量参数的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03
  • Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)

    Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)

    Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。本文将从CSS过渡transition、CSS动画animation及配合使用第三方CSS动画库(如animate.css)这三方面来详细介绍Vue过渡效果之CSS过渡
    2020-02-02
  • Vue实现兄弟组件间的联动效果

    Vue实现兄弟组件间的联动效果

    这篇文章主要介绍了Vue实现兄弟组件间的联动效果,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • vue 属性拦截实现双向绑定的实例代码

    vue 属性拦截实现双向绑定的实例代码

    这篇文章主要介绍了vue 属性拦截实现双向绑定的实例代码,代码简答易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component

    vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component

    这篇文章主要介绍了vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04

最新评论