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>

大家還可以掃描二維碼,關注我的微信公眾號,蝸牛全棧。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM