vue3知识点:Teleport组件

简介: vue3知识点:Teleport组件

image.png

@[toc]

五、新的组件

2.Teleport

问题:什么是Teleport?

答案: Teleport 是一种能够将我们的 组件html结构移动到指定位置的技术。

java <teleport to="移动位置"> <div v-if="isShow" class="mask"> <div class="dialog"> <h3>我是一个弹窗</h3> <button @click="isShow = false">关闭弹窗</button> </div> </div> </teleport>
注意点1:

问题:使用传送的好处?

答案:不影响其他组件html的结构,举例说明我son组件有个div,我有个显示按钮,有个隐藏按钮,如果不使用Teleport,那么每次展示div时候会影响别的组件html结构,而使用Teleport就不会影响,具体效果看案例结果一目了然。

注意点2:
好处是方便定位,直接把html结构直接传送走,比如案例的传送至body处或者其他处。

案例

完整代码

项目结构

image.png

main.js

//引入的不再是Vue构造函数了,引入的是一个名为createApp的工厂函数
import {
    createApp } from 'vue'
import App from './App.vue'

//创建应用实例对象——app(类似于之前Vue2中的vm,但app比vm更“轻”)
const app = createApp(App)

//挂载
app.mount('#app')

App.vue

<template>
    <div class="app">
        <h3>我是App组件</h3>
        <Child/>
    </div>
</template>

<script>
    import Child from './components/Child'
    export default {
   
        name:'App',
        components:{
   Child},
    }
</script>

<style>
    .app{
   
        background-color: gray;
        padding: 10px;
    }
</style>

Child.vue

<template>
    <div class="child">
        <h3>我是Child组件</h3>
        <Son/>
    </div>
</template>

<script>
    import Son from './Son'
    export default {
   
        name:'Child',
        components:{
   Son},
    }
</script>

<style>
    .child{
   
        background-color: skyblue;
        padding: 10px;
    }
</style>

Son.vue

<template>
    <div class="son">
        <h3>我是Son组件</h3>
        <Dialog/>
    </div>
</template>

<script>
    import Dialog from './Dialog.vue'
    export default {
   
        name:'Son',
        components:{
   Dialog}
    }
</script>

<style>
    .son{
   
        background-color: orange;
        padding: 10px;
    }
</style>

Dialog.vue

<template>
    <div>
        <button @click="isShow = true">点我弹个窗</button>
        <teleport to="body">
            <div v-if="isShow" class="mask">
                <div class="dialog">
                    <h3>我是一个弹窗</h3>
                    <h4>一些内容</h4>
                    <h4>一些内容</h4>
                    <h4>一些内容</h4>
                    <button @click="isShow = false">关闭弹窗</button>
                </div>
            </div>
        </teleport>
    </div>
</template>

<script>
    import {
   ref} from 'vue'
    export default {
   
        name:'Dialog',
        setup(){
   
            let isShow = ref(false)
            return {
   isShow}
        }
    }
</script>

<style>
    .mask{
   
        position: absolute;
        top: 0;bottom: 0;left: 0;right: 0;
        background-color: rgba(0, 0, 0, 0.5);
    }
    .dialog{
   
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
        text-align: center;
        width: 300px;
        height: 300px;
        background-color: green;
    }
</style>

结果展示:

image.png

使用Teleport-案例结果.gif

image.png

未使用Teleport-案例结果.gif

本人其他相关文章链接

1.《vue3第五章》新的组件,包含:Fragment、Teleport、Suspense
2.vue3知识点:Teleport组件
3.vue3知识点:Suspense组件

目录
相关文章
|
24天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
126 64
|
24天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
29 8
|
23天前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
23 1
|
23天前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
33 1
|
24天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
86 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
|
JavaScript
vue 组件传值
vue 组件传值
84 0
|
JavaScript
vue父子组件传值
vue父子组件传值
下一篇
DataWorks