美文网首页
vue3 teleport传送门的使用

vue3 teleport传送门的使用

作者: 程序员三千_ | 来源:发表于2021-08-16 11:44 被阅读0次
定义:可以将组件的DOM元素直接传送到某一位置进行展示。
  • 使用场景:像 modals,toast 等这样的元素,很多情况下,我们将它完全的和我们的 Vue 应用的 DOM 完全剥离,管理起来反而会方便容易很多
1、未使用teleport的时候
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <style>
        .area {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            width: 200px;
            height: 200px;
            background: black;
        }
        
        .mask {
            position: absolute;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
            background: green;
            opacity: 0.5;
        }
    </style>
    <script src="https://unpkg.com/vue@next"></script>
</head>

<body>
    <div id="root">
        <div class="area">
            <button @click="handleClick">按钮</button>
            <div class="mask" v-show="show"></div>
        </div>
    </div>
</body>
<script>
    //自定义指令
    const app = Vue.createApp({
        data() {
            return {
                show: false
            }
        },

        methods: {
            handleClick() {
                this.show = !this.show
            }
        },

    });



    const vm = app.mount('#root');
</script>

</html>

效果:蒙层在div内部


image.png
2、使用teleport的时候
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
    <style>
        .area {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);
            width: 200px;
            height: 200px;
            background: black;
        }
        
        .mask {
            position: absolute;
            left: 0;
            right: 0;
            top: 0;
            bottom: 0;
            background: green;
            opacity: 0.5;
        }
    </style>
    <script src="https://unpkg.com/vue@next"></script>
</head>

<body>

    <div id="root">
        <div class="area">
            <button @click="handleClick">按钮</button>
            <teleport to='#mask'>
                <div class="mask" v-show="show"></div>
            </teleport>
        </div>
    </div>
    <div id="mask"></div>


</body>
<script>
    //自定义指令
    const app = Vue.createApp({
        data() {
            return {
                show: false
            }
        },

        methods: {
            handleClick() {
                this.show = !this.show
            }
        },

    });



    const vm = app.mount('#root');
</script>

</html>

效果:


image.png

相关文章

网友评论

      本文标题:vue3 teleport传送门的使用

      本文链接:https://www.haomeiwen.com/subject/ttjcbltx.html