1. 程式人生 > 其它 >vue3新特性teleport傳送原來這麼神奇

vue3新特性teleport傳送原來這麼神奇

我對teleport的理解

teleport有傳送的意思,讀音【te li po t】[嘻嘻],看官們應該知道讀啥子了吧
它可以將你寫的程式碼傳送到某一個地方
傳送到哪一個地方呢?
傳送到你標記的地方,比如說傳送到body下,html下

官方說:Teleport 是一種能夠將我們的模板移動到 DOM 中 Vue app 之外的其他位置的技術,
上面這一句話是說傳送到除了app之外的地方。
也就是說不能夠傳送到app之內。【注意了】
點像哆啦A夢的“任意門”
主要運用在彈窗上,訊息提示,這樣的場景!
下面我們就來簡單使用一下:
我們將彈窗元件移動到body下

場景描述

a-test元件中有b-test元件,b-test元件中有c-mask[彈窗元件]
我們點選按鈕,將b-test元件中的元件c-mask[彈窗元件]移動到body下

容器下有a-test元件

<template>
  <div class="box">
    <a-test></a-test>  
  </div>
</template>

<script>
import atest from '../components/a-test.vue'
  export default {
    components:{
      'a-test':atest,
    },
  }
</script>

a-test元件下有b-test元件

<template>
  <div class="a-test" >
    我是a-test元件
    <b-test></b-test>
    <div id="testdemo"></div>
  </div>
</template>

<script>
import btest from '../components/b-test.vue'
export default {
  components:{
      'b-test':btest
  },
}
</script>

b-test元件下有c-mask[彈窗元件]元件

<template>
  <div class="b-test">
    我是b-test元件
    <c-mask></c-mask>
  </div>
</template>

<script>
import cmask  from "./c-mask.vue"
export default {
  components:{
      'c-mask':cmask
  },
}
</script>

c-mask[彈窗元件]元件移動到body下

<template>
  <div>
    <a-button type="primary" @click="openHander">open</a-button>
    <!-- 將內容區域的程式碼移動到body下 -->
    <teleport to='body'>
      <div class="mask" v-if="showFlag">
        <h1>對話方塊元件</h1>
        <div>
            我是內容哈哈
        </div>
        <a-button  @click="openHander">關閉</a-button>
      </div>
    </teleport>
  </div>
</template>

<script>
import { ref } from '@vue/reactivity'
export default {
    setup () {
        let showFlag=ref(false)
        const openHander=()=>{
            showFlag.value=!showFlag.value
        }
        return {showFlag,openHander}
    }
}
</script>

主要注意的地方

通過上面的小粒子,想必你已經看明白了。
需要注意的是不可以移動到#app之內
我們可以在index.html中建立id=myapp的容器
將它傳送在myapp容器下,我們看一下

index.html 建立一個容器

<body>
    <div id="app"></div>
    //等會將會傳送到這裡哈
    <div id="myapp"></div>
  </body>

傳送

<template>
  <div>
    <a-button type="primary" @click="openHander">open</a-button>
    <!-- 將內容區域的程式碼移動到id=myapp下 -->
    <teleport to='#myapp'>
        <div class="mask" v-if="showFlag">
            <h1>對話方塊元件</h1>
            <div>
                我是內容哈哈
            </div>
            <a-button  @click="openHander">關閉</a-button>
        </div>
    </teleport>
  </div>
</template>
<script>
import { ref } from '@vue/reactivity'
export default {
  setup () {
    let showFlag=ref(false)
    const openHander=()=>{
        showFlag.value=!showFlag.value
    }
    return {showFlag,openHander}
  }
}
</script>
作者:明月人倚樓
出處:https://www.cnblogs.com/IwishIcould/

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯絡你;(っ•̀ω•́)っ✎⁾⁾!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,或者關注博主,在此感謝!

萬水千山總是情,打賞5毛買辣條行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主(っ•̀ω•́)っ✎⁾⁾!

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯絡你;(っ•̀ω•́)っ✎⁾⁾!

支付寶 微信 本文版權歸作者所有,歡迎轉載,未經作者同意須保留此段宣告,在文章頁面明顯位置給出原文連線
如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。