收起左侧

[前端] vue3—Teleport 传送门功能

0
回复
[复制链接]
avatar
  • TA的每日心情
    qdsmile开心
    2023-12-13 16:27
  • 签到天数: 16 天

    [LV.4]常来常往

    4

    主题

    4

    帖子

    69

    积分

    发表于 2023-1-4 19:57:33 | 显示全部楼层 |阅读模式
    我们设想这样一个场景,在编写vue工程化代码时,如果想将一个全局遮罩挂载到body下,也就是body是遮罩的父级,可往往不尽如意,因层层嵌套,导致没法实现这一功能。再一个布局的问题,比如页面统统使用定位进行布局,那不将遮罩直接放到 body 下会很麻烦
    而解决这一问题,vue也提供了方案,那就是:传送门!!!名字很高大上,其实就是直接将组件的 DOM 内容挂载到指定的位置
    dom元素:
    1. <div id="root"></div>
    复制代码

    vue 代码示例:
    1. const app = Vue.createApp({
    2.   data() {
    3.     return {
    4.       show: false,
    5.     }
    6.   },
    7.   methods:{
    8.     handleBenClick() {
    9.       this.show = !this.show;
    10.     }
    11.   },
    12.   template: `
    13.         <div class="area">
    14.           <button @click="handleBenClick">按钮</button>
    15.           <teleport to="body">
    16.             <div class="mask" v-show="show"></div>
    17.           </teleport>
    18.         </div>
    19.       `
    20. })
    21. app.directive('pos', (el, binding)=>{
    22.   el.style[binding.arg] = binding.value+'px';
    23. })
    24. const vm = app.mount('#root');
    复制代码


    您需要登录后才可以回帖 登录 | 立即注册 QQ登录

    本版积分规则