一. Vue内置组件Teleport
-
- 认识
Teleport
(teleport
:允许我们把组件的模板渲染到特定的元素上)
1.1. 在组件化开发中,我们封装一个组件A,在另外一个组件B中使用
- 组件A中
template
的元素,会被挂载到组件B中template
的某个位置; - 最终我们的应用程序会形成一颗
DOM
树结构;
- 组件A中
1.2. 某些情况下,希望组件不是挂载在这个组件树上,可能是移动到
Vue app
之外的其他位置;- 比如移动到body元素上,或者我们有其他的
div#app
之外的元素上; - 这种场景可以通过
teleport
来完成;
- 比如移动到body元素上,或者我们有其他的
1.3.
Teleport
的解释- 它是一个Vue提供的内置组件,类似于
react的Portals
; teleport
翻译过来是心灵传输、远距离运输的意思:- 它有两个属性:
- to: 指定将其中的内容移动到的目标元素,可以使用选择器
- disabled: 是否禁用teleport的功能
- 它有两个属性:
- 它是一个Vue提供的内置组件,类似于
1.4. 多个
teleport
- 将多个teleport应用到同一个目标上(to的值相同), 那么这些目标会进行合并:
<template> <div class="app"> <div class="hello-word"> <p class="content"> <teleport to="body"> <hello-word></hello-word> </teleport> <teleport to="#abc"> <hello-word></hello-word> </teleport> <teleport to="#abc"> <h2>哈哈哈哈</h2> </teleport> </p> </div> </div> </template>
- 认识
二. Vue内置组件Suspense
Suspense
:异步组件1.1. 目前
Suspense
显示的是一个实验性的特性,API随时可能会修改1.2.
Suspense
是一个内置的全局组件,该组件有两个插槽:- default: 如果
default
可以显示,默认显示default
的内容 - fallback: 如果
default
无法显示,则显示fallback
插槽的内容(fallback
中文翻译:应急方案)
<template> <div class="app"> <!-- app在解析这个组件,需要从服务器下载下来在解析这个组件,他需要有一个下载的过程, 还没下载下来需要显示一个默认的组件, --> <!-- fallback:应急方案 在文件还没加载过来或者还没下载下来时候显示这个插槽内容 --> <suspense> <template #default> <async-home></async-home> </template> <template #fallback> <h2>Loading </h2> </template> </suspense> </div> </template> <script setup> import { defineAsyncComponent } from 'vue'; const AsyncHome = defineAsyncComponent(() => import("./AsyncHome.vue")) </script>
- default: 如果