程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Vue2

  • Vue3

    • 初识Vue3
    • 组合式API
    • Vue3中的data数据
    • vue3 的 script标签
    • setup函数中执行顺序
    • toRefs() 与 toRef()
    • computed()
    • Vue3弱化this
    • watch() 和 watchEffec()
    • define函数用法
    • defineExpose() 和 ref 属性
    • vue.config.js
    • 生命周期
    • Vue3全局API调用
    • 自定义 Hook
    • 传递数据(props)
    • 路由
    • pinia
    • 组件通信
    • getCurrentInstance() 和 nextTick()
    • Vue3 新组件
      • 1. 【Teleport】
        • 什么是 Teleport?
        • 基本语法
        • 使用方法
      • 2. 【Suspense】
        • 什么是 Suspense?
        • 基本语法
        • 使用方法
      • 3. 【其他变更】
        • 1. 过渡类名的变更
        • 2. `keyCode` 事件修饰符的移除
        • 3. `v-model` 的重新设计
        • 4. `v-if` 和 `v-for` 的优先级变更
        • 5. 实例方法的移除
        • 6. 过滤器(Filters)的移除
  • vue3 + TS 项目集成

  • Vue全家桶
  • Vue3
scholar
2024-08-05
目录

Vue3 新组件

前言

Vue3 引入了一些新组件和功能,并对部分 API 进行了变更。以下是对这些变化的详细总结,包括每个功能的介绍、使用方法及其应用场景。

# 1. 【Teleport】

# 什么是 Teleport?

  • Teleport 是 Vue 3 中新增的一个功能,允许你将组件的 HTML 结构移动到指定的 DOM 位置。这在处理模态框、弹窗等需要脱离父组件结构渲染的场景中非常有用。

# 基本语法

<teleport to="目标选择器">
  <template>
    <!-- Teleport 的内容 -->
  </template>
</teleport>
1
2
3
4
5
  • to 属性:指定将内容传送到的 DOM 选择器。

# 使用方法

<template>
  <teleport to="body">
    <div class="modal" v-show="isShow">
      <h2>我是一个弹窗</h2>
      <p>我是弹窗中的一些内容</p>
      <button @click="isShow = false">关闭弹窗</button>
    </div>
  </teleport>
</template>

<script setup>
import { ref } from 'vue';

let isShow = ref(true);
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

解释:

  • 这个示例中,模态框的 HTML 结构被 Teleport 到了 body 标签内,尽管其逻辑上属于当前组件。

# 2. 【Suspense】

# 什么是 Suspense?

  • Suspense 是 Vue 3 中的一个新组件,用于在等待异步组件加载时渲染一些额外内容,从而提升用户体验。这对于需要等待异步请求的数据或组件时尤为有用。

# 基本语法

<Suspense>
  <template v-slot:default>
    <!-- 主内容 -->
  </template>
  <template v-slot:fallback>
    <!-- 加载状态 -->
  </template>
</Suspense>
1
2
3
4
5
6
7
8

# 使用方法

  • 步骤 1:异步引入组件

    import { defineAsyncComponent } from 'vue';
    
    const Child = defineAsyncComponent(() => import('./Child.vue'));
    
    1
    2
    3
  • 步骤 2:使用 Suspense 包裹组件

    <template>
      <div class="app">
        <h3>我是App组件</h3>
        <Suspense>
          <template v-slot:default>
            <Child />
          </template>
          <template v-slot:fallback>
            <h3>加载中.......</h3>
          </template>
        </Suspense>
      </div>
    </template>
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

解释:

  • 当 Child 组件异步加载时,Suspense 会显示 fallback 插槽中的内容(如“加载中...”),加载完成后,Child 组件的内容会自动替换掉 fallback。

# 3. 【其他变更】

Vue 3 对部分指令、事件及实例方法进行了修改或移除,以下是这些变化的详细总结。

# 1. 过渡类名的变更

  • Vue 2:v-enter、v-leave
  • Vue 3:v-enter-from、v-leave-from

这使得过渡类名更加语义化,区分了过渡的不同阶段。

# 2. keyCode 事件修饰符的移除

  • Vue 2 中,keyCode 可用于 v-on 事件修饰符(如 @keyup.enter)。

  • Vue 3:keyCode 被移除,推荐使用 event.key 代替。

    <input @keyup.enter="submit" /> <!-- Vue 2 -->
    <input @keyup.enter="submit" /> <!-- Vue 3 中依旧支持 -->
    
    1
    2

# 3. v-model 的重新设计

  • Vue 3 中,v-model 的语法被重新设计,以支持多个 v-model 绑定到一个组件。v-bind.sync 已被移除。

    <child-component v-model:title="title" v-model:content="content" />
    
    1

# 4. v-if 和 v-for 的优先级变更

  • Vue 3 中,v-if 的优先级高于 v-for,这意味着在同一元素上使用时,v-if 会首先执行。

# 5. 实例方法的移除

  • 移除了 $on、$off 和 $once:Vue 3 不再支持这三个事件方法,推荐使用组件的事件绑定机制或组合式 API 替代。
  • 移除了 $children 实例属性:Vue 3 不再支持直接访问子组件实例的 $children 属性,建议使用 ref 或依赖注入来管理子组件的引用。
  • 移除了过滤器 filter:过滤器在 Vue 3 中被移除,推荐使用计算属性或方法来处理数据的格式化。

# 6. 过滤器(Filters)的移除

  • Vue 3 中,过滤器功能被移除。对于数据格式化,推荐使用计算属性或方法。

这些变更和新增功能使得 Vue 3 更加模块化、灵活,并优化了性能和可维护性。开发者需要熟悉这些新特性和 API 变更,以便在项目中有效地应用它们。

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
getCurrentInstance() 和 nextTick()
集成element-plus

← getCurrentInstance() 和 nextTick() 集成element-plus→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式