Vue3中的Teleport(传送门)

动画片多啦A梦相信大家很多都看过,而且近几年又出现了相关的电影,作为小编一个男生来说,一直是对里面的静香念念不忘,有点跑偏了哈,今天小编介绍的Teleport就和多啦A梦的任意门一样,可以穿梭到任何的DOM中的任何地方。

模态框一直是实际开发中用到比较多的功能之一,在没有各种各样的组件之前,我们需要通过css中的定位对元素进行修饰,有了Teleport,我们就可以这样实现一个简单的模态的组件

<style>  .area{      position: absolute;      left: 50%;      top:50%;      transform: translate(-50%,-50%);/*  */      width: 200px;      height: 300px;      background:green;  }  .mask{      position: absolute;      left:0;      right:0;      top:0;      bottom:0;      background: #000;      opacity: 0.5;  }</style><script>  const app = Vue.createApp({      data(){          return {              show:false          }      },      methods:{          handleBtnClick(){              this.show = !this.show          }      },      template: `<div class="area">              <button @click="handleBtnClick">按钮</button>              <teleport to="body">                  <div class="mask" v-show="show"></div>              </teleport>              </div>`  })
  const vm = app.mount("#root")</script>

上面的例子是将元素传递到body中,如果要将元素传递到指定的DOM节点,我们要怎么处理呢?

我们通过Teleport中的to属性,可以将代码写成这样

<body>  <div id="root"></div>  <div id="hello"></div></body><script>  const app = Vue.createApp({        data(){          return {              show:false          }      },      methods:{          handleBtnClick(){              this.show = !this.show          }      },      template: `<div class="area">        <button @click="handleBtnClick">按钮</button>         // 类似css选择器,根据DOM元素不同,通过to属性设置传送的位置        <teleport to="#hello">          <div class="mask" v-show="show"></div>        </teleport>      </div>`  })
  const vm = app.mount("#root")</script>

大家还可以扫描二维码,关注我的微信公众号,蜗牛全栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞鹰3995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值