首页 > 其他分享 >【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例

时间:2024-01-15 12:32:57浏览次数:24  
标签:组合式 23 provide 示例 defineModel defineOptions API 组件



这里写自定义目录标题

  • 一、组合式API - 父子通信
  • 1. 父传子
  • 2. 子传父
  • 二、 组合式API - 模版引用
  • 1. 基本使用
  • 2. defineExpose
  • 三、组合式API - provide和inject
  • 1. 作用和场景
  • 2. 跨层传递普通数据
  • 3. 跨层传递响应式数据
  • 4. 跨层传递方法
  • 四、Vue3.3 新特性-defineOptions
  • 五、Vue3.3新特性-defineModel
  • 六、总结


【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_Vue

一、组合式API - 父子通信

1. 父传子

基本思想

  1. 父组件中给子组件绑定属性
  2. 子组件内部通过props选项接收数据

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_Vue_02

2. 子传父

基本思想

  1. 父组件中给子组件标签通过@绑定事件
  2. 子组件内部通过 emit 方法触发事件

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_javascript_03

二、 组合式API - 模版引用

概念:通过 ref标识 获取真实的 dom对象或者组件实例对象

1. 基本使用

实现步骤:

  1. 调用ref函数生成一个ref对象
  2. 通过ref标识绑定ref对象到标签

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_前端_04

2. defineExpose

默认情况下在

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_vue.js_05

三、组合式API - provide和inject

1. 作用和场景

顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_javascript_06

2. 跨层传递普通数据

实现步骤

  1. 顶层组件通过 provide 函数提供数据
  2. 底层组件通过 inject 函数提供数据

3. 跨层传递响应式数据

在调用provide函数时,第二个参数设置为ref对象

!

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_前端_07

4. 跨层传递方法

顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_前端_08

四、Vue3.3 新特性-defineOptions

背景说明:

但是用了


为了解决这一问题,引入了 defineProps 与 defineEmits 这两个宏。但这只解决了 props 与 emits 这两个属性。

如果我们要定义组件的 name 或其他自定义的属性,还是得回到最原始的用法——再添加一个普通的

这样就会存在两个


所以在 Vue 3.3 中新引入了 defineOptions 宏。顾名思义,主要是用来定义 Options API 的选项。可以用 defineOptions 定义任意的选项, props, emits, expose, slots 除外(因为这些可以使用 defineXXX 来做到)

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_Vue_09

五、Vue3.3新特性-defineModel

在Vue3中,自定义组件上使用v-model, 相当于传递一个modelValue属性,同时触发 update:modelValue 事件

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_javascript_10

我们需要先定义 props,再定义 emits 。其中有许多重复的代码。如果需要修改此值,还需要手动调用 emit 函数。

于是乎 defineModel 诞生了。

【Vue2+3入门到实战】(23)Vue3之组合式API - 父子通信、模版引用、provide和inject、Vue3.3 新特性-defineOptions和defineModel 详细示例_API_11

生效需要配置 vite.config.js

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue({
      script: {
        defineModel: true
      }
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})

六、总结

Vue 3 中的组合式 API 是一种新的开发风格,它将组件的逻辑功能拆分为更小的可复用的函数。在这种开发模式下,我们可以使用一组函数来定义组件的状态、计算属性、事件等,并且可以很方便地共享逻辑代码。

在组合式 API 中,父子组件之间的通信可以通过 prop 和 emit 来实现。父组件可以通过向子组件传递 prop 的方式来传递数据,子组件可以通过 emit 事件的方式将数据传递给父组件。

模板引用是 Vue 3 中一个非常方便的特性,它允许我们在模板中使用 ref 接收一个组件实例的引用,并且可以直接调用该实例中的方法和访问其属性。

provide 和 inject 是 Vue 3 中新引入的 API,它们可以用来实现全局状态的共享。provide 可以在组件中声明一个或多个值,这些值可以被该组件的所有子孙组件访问。而 inject 可以在子孙组件中声明一个或多个依赖项,它们会在祖先组件中查找并注入。

Vue 3.3 版本引入了两个新的特性:defineOptions 和 defineModel。

defineOptions 可以用来定义组件的选项,它接受一个对象作为参数,其中包含了组件的 props、methods、computed 等选项。这样我们可以在组件外部定义组件的选项,然后在组件内部进行使用。

defineModel 可以用来定义组件的 v-model 行为,它接受一个对象作为参数,其中包含了 v-model 的 prop 名称和事件名称。这样我们可以在组件外部定义组件的 v-model 行为,然后在组件内部进行使用。

总的来说,Vue 3 中的组合式 API 提供了更灵活和可复用的开发方式,通过父子通信、模板引用、provide 和 inject、defineOptions 和 defineModel 等新特性,使得我们可以更好地组织和管理我们的代码。Vue 3 中的组合式 API 是一种新的开发风格,它将组件的逻辑功能拆分为更小的可复用的函数。在这种开发模式下,我们可以使用一组函数来定义组件的状态、计算属性、事件等,并且可以很方便地共享逻辑代码。

在组合式 API 中,父子组件之间的通信可以通过 prop 和 emit 来实现。父组件可以通过向子组件传递 prop 的方式来传递数据,子组件可以通过 emit 事件的方式将数据传递给父组件。

模板引用是 Vue 3 中一个非常方便的特性,它允许我们在模板中使用 ref 接收一个组件实例的引用,并且可以直接调用该实例中的方法和访问其属性。

provide 和 inject 是 Vue 3 中新引入的 API,它们可以用来实现全局状态的共享。provide 可以在组件中声明一个或多个值,这些值可以被该组件的所有子孙组件访问。而 inject 可以在子孙组件中声明一个或多个依赖项,它们会在祖先组件中查找并注入。

Vue 3.3 版本引入了两个新的特性:defineOptions 和 defineModel。

defineOptions 可以用来定义组件的选项,它接受一个对象作为参数,其中包含了组件的 props、methods、computed 等选项。这样我们可以在组件外部定义组件的选项,然后在组件内部进行使用。

defineModel 可以用来定义组件的 v-model 行为,它接受一个对象作为参数,其中包含了 v-model 的 prop 名称和事件名称。这样我们可以在组件外部定义组件的 v-model 行为,然后在组件内部进行使用。

总的来说,Vue 3 中的组合式 API 提供了更灵活和可复用的开发方式,通过父子通信、模板引用、provide 和 inject、defineOptions 和 defineModel 等新特性,使得我们可以更好地组织和管理我们的代码。


标签:组合式,23,provide,示例,defineModel,defineOptions,API,组件
From: https://blog.51cto.com/u_12948819/9252771

相关文章

  • 2023安洵杯第六届网络安全挑战赛 Misc
    签到Nahida打开压缩包得到2个文件用010打开发现ffd8ffe0的关键字眼被倒转了,使用工具进行恢复得到一大串爆破的逆转在reverse_2_Nahida!处为jpg添加后缀reverse_2_Nahida!.jpg我们得到图片在FFD9处发现还有其他东西导出进行查看得到txt根据提示应该是一个为......
  • Flink 为什么跑官方例子得勾选 include dependencies with"Provided" provided适合在
    Flink为什么跑官方例子得勾选includedependencieswith"Provided"provided适合在编译和测试的环境,和compile类似,但是provide仅仅需要在编译和测试阶段,这是因为provide将不会被打包到lib目录下。大意就是说只要是打上了这个标签就不会被打包到jar文件,所以我们在本地进行编译和......
  • EC Final2023 游记
    因为16号下午有一个面试,17号要开始上班,另有一万篇论文没读,所以不写了。其实和算法竞赛的缘分应该还会继续延续,这个赛季的结束也不是什么关键节点,甚至这个赛季也没有结束。想在大一这个赛季主线的endpoint,感谢所有在算法竞赛道路上帮助过我的人。大概教练和同学和队友和陌......
  • .NET Conf China 2023分享-.NET应用国际化-AIGC智能翻译+代码生成
    今年.NETConfChina2023技术大会,我给大家分享了.NET应用国际化-AIGC智能翻译+代码生成的议题,今天整理成博客,分享给所有人。随着疫情的消退,越来越多的企业开始向海外拓展,应用系统的国际化和本地化是一个巨大的技术挑战,我们今天重点探讨以下内容:.NET应用如何实现国际化?不仅仅......
  • 2023年考研成绩提前查脚本
    1importrequests2importurllib33importtime4importjson5urllib3.disable_warnings()6url="https://yz.chsi.com.cn/apply/cjcx/cjcx.do"7headers={8'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)A......
  • 滑动窗口的最大值 239 单调队列初识
    最开始做的时候,暴力解法结果不管怎么剪枝,还是超时了。后来看到了卡哥的方法,学到了单调队列,其实就是自定义队列。用deque来实现。有三个关键点:pop,push,front.pop,如果遍历的元素等于队头元素,则头删。push,把比遍历元素小的都进行尾部删。front,就是普通的查找队头。循环遍历的时......
  • [刷题技巧] LeetCode238. 除自身以外数组的乘积
    题目描述思路:前缀/后缀乘积数组构造除自身以外数组的左边前缀乘积构造除自身以外数组的右边后缀乘积然后对应位置相乘方法一:classSolution{publicint[]productExceptSelf(int[]nums){intn=nums.length;//前缀乘积数组:leftProduct[i]表......
  • 50、Flink的单元测试介绍及示例
    Flink系列文章一、Flink专栏Flink专栏系统介绍某一知识点,并辅以具体的示例进行说明。1、Flink部署系列本部分介绍Flink的部署、配置相关基础内容。2、Flink基础系列本部分介绍Flink的基础部分,比如术语、架构、编程模型、编程指南、基本的datastreamapi用法、四大基......
  • 【公开课-微软RPA】12月23日,RPA 学习天地成功举办基于微软RPA公开课,让更多人用上RPA,用
    12月23日,RPA学习天地成功举办了,基于微软RPA工具(PowerAutomateDesktop)直播公开课,成功地帮助学员们初步了解了微软RPA工具的功能。本次公开课,主要介绍了如何使用微软的RPA工具来实现Boss直聘岗位薪资自动爬取的场   首先:通过查询岗位相关信息并保存到本地,然后进行数据筛......
  • c#中DataTable转List的2种方法示例
    1. 直接写一个datatable转list的类publicList<Dictionary<string,object>>DatatoTable(DataTabledt){List<Dictionary<string,object>>list=newList<Dictionary<string,object>>();foreach(DataRowdrindt.Rows)//每一行......