最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3內(nèi)置組件Teleport使用方法詳解

 更新時(shí)間:2021年10月23日 10:01:10   作者:hezhongfeng  
這篇文章主要介紹了Vue3內(nèi)置組件Teleport使用方法,Teleport是Vue 3.0 新增的一個(gè)內(nèi)置組件,主要是為了解決一些特殊場景下模態(tài)對(duì)話框組件、組件的渲染,帶著些許的了解一起走進(jìn)下面文章的詳細(xì)內(nèi)容吧

前言:

Vue 3.0 新增了一個(gè)內(nèi)置組件 teleport ,主要是為了解決以下場景:

有時(shí)組件模板的一部分邏輯上屬于該組件,而從技術(shù)角度來看,最好將模板的這一部分移動(dòng)到 DOM Vue app 之外的其他位置

場景舉例:一個(gè) Button ,點(diǎn)擊后呼出模態(tài)對(duì)話框

這個(gè)模態(tài)對(duì)話框的業(yè)務(wù)邏輯位置肯定是屬于這個(gè) Button ,但是按照 DOM 結(jié)構(gòu)來看,模態(tài)對(duì)話框的實(shí)際位置應(yīng)該在整個(gè)應(yīng)用的中間

這樣就有了一個(gè)問題:組件的邏輯位置和DOM位置不在一起

按照以前 Vue2 的做法,一般是使用 position: fixed; 等CSS屬性強(qiáng)行把對(duì)話框定位到了應(yīng)用的中間位置,屬于沒有辦法的辦法,下面展示下 teleport 的基礎(chǔ)用法。

1、Teleport用法

用法非常簡單,只需要使用 to 這個(gè)屬性就可以把組件渲染到想要的位置

// 渲染到body標(biāo)簽下
<teleport to="body">
  <div class="modal">
    I'm a teleported modal! 
  </div>
</teleport>

也可以使用:

<teleport to="#some-id" />
<teleport to=".some-class" />
<teleport to="[data-teleport]" />


必須是有效的查詢選擇器或 HTMLElement

進(jìn)一步

2、完成模態(tài)對(duì)話框組件

現(xiàn)在我們來封裝一個(gè)標(biāo)準(zhǔn)的模態(tài)對(duì)話框

<template>
  <teleport to="body">
    <transition name="dialog-fade">
      <div class="dialog-wrapper" v-show="visible">
        <div class="dialog">
          <div class="dialog-header">
            <slot name="title">
              <span class="dialog-title">
                {{ title }}
              </span>
            </slot>
          </div>
          <div class="dialog-body">
            <slot></slot>
          </div>
          <div class="dialog-footer">
            <slot name="footer">
              <button @click="onClose">關(guān)閉</button>
            </slot>
          </div>
        </div>
      </div>
    </transition>
  </teleport>
</template>

<script>
import { defineComponent } from 'vue';

export default defineComponent({
  name: 'tdialog'
});
</script>

<script setup>
const props = defineProps({
  title: String,
  visible: Boolean
});

const emit = defineEmits(['close']);

const onClose = () => {
  emit('close');
};
</script>

使用的時(shí)候,只需要

<t-dialog title="LGD是不可戰(zhàn)勝的" :visible="visible" @close="onClose"> 這是一段內(nèi)容,蕭瑟仙貝。 </t-dialog>

// ...
const visible = ref(false);

const onDialog = () => {
  visible.value = !visible.value;
};

const onClose = () => {
  visible.value = false;
};

更進(jìn)一步

3、組件的渲染

上面我們已經(jīng)把標(biāo)準(zhǔn)的模態(tài)對(duì)話框組件完成了,還有另外一種相似的,只需要展示少量文字的輕量級(jí)提示組件 Message

在上面的例子中,我們總是把 TDialog 組件寫在使用的地方,但是這個(gè) Messgae 組件,我們?cè)谙胩崾镜臅r(shí)候使用一個(gè)js語句就把它呼出來,類似于下面的這樣

// 呼出一個(gè)提示
Message({ message: '這是一條Message消息' });


想使用一個(gè)函數(shù)呼出來,我們需要準(zhǔn)備下這個(gè)函數(shù),這個(gè)函數(shù)的作用就是完成組件的渲染。

const Message = options => {
  // 準(zhǔn)備渲染容器
  const container = document.createElement('div');
  // 生成vnode
  const vnode = createVNode(MessageConstructor, options);
  // 渲染
  render(vnode, container);
};


MessageConstructor 是什么?就是我們的SFC(單文件組件):

<template>
  <teleport to="#app">
    <transition name="message-fade">
      <div v-show="visible" ref="ins" class="message" :style="customStyle">{{ message }}</div>
    </transition>
  </teleport>
</template>

在線 體驗(yàn)

查看 代碼

總結(jié):

以上就是關(guān)于 teleport 組件的基礎(chǔ)用法和擴(kuò)展用法,給我們提供了不少的方便,到此這篇關(guān)于Vue3內(nèi)置組件Teleport使用方法詳解的文章就介紹到這了,更多相關(guān)Vue3內(nèi)置組件Teleport用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue不用import直接調(diào)用實(shí)現(xiàn)接口api文件封裝

    vue不用import直接調(diào)用實(shí)現(xiàn)接口api文件封裝

    這篇文章主要為大家介紹了vue不用import直接調(diào)用實(shí)現(xiàn)接口api文件封裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 基于element-ui封裝表單金額輸入框的方法示例

    基于element-ui封裝表單金額輸入框的方法示例

    這篇文章主要介紹了基于element-ui封裝表單金額輸入框的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue cli 3.0 使用全過程解析

    vue cli 3.0 使用全過程解析

    這篇文章主要介紹了vue-cli 3.0 使用全過程,本文通過項(xiàng)目實(shí)例相結(jié)合的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2018-06-06
  • vue form表單post請(qǐng)求結(jié)合Servlet實(shí)現(xiàn)文件上傳功能

    vue form表單post請(qǐng)求結(jié)合Servlet實(shí)現(xiàn)文件上傳功能

    這篇文章主要介紹了vue form表單post請(qǐng)求結(jié)合Servlet實(shí)現(xiàn)文件上傳功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • vue3如何使用setup代替created

    vue3如何使用setup代替created

    Vue3中的setup是一個(gè)新的生命周期函數(shù),它可以用來代替組件中的 data和一些生命周期函數(shù)(如created和beforeMount),這篇文章主要介紹了vue3如何使用setup代替created的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • vant自定義二級(jí)菜單操作

    vant自定義二級(jí)菜單操作

    這篇文章主要介紹了vant自定義二級(jí)菜單操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue2路由基本用法實(shí)例分析

    vue2路由基本用法實(shí)例分析

    這篇文章主要介紹了vue2路由基本用法,結(jié)合實(shí)例形式分析了vue2路由基本功能、原理、用法與操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • Vue中實(shí)現(xiàn)路由跳轉(zhuǎn)的三種方式(超詳細(xì)整理)

    Vue中實(shí)現(xiàn)路由跳轉(zhuǎn)的三種方式(超詳細(xì)整理)

    這篇文章給大家詳細(xì)的整理了Vue中實(shí)現(xiàn)路由跳轉(zhuǎn)的三種方式,使用vue-router,聲明式-router-link,編程式這三種方法,分別有詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-09-09
  • vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件

    vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件

    這篇文章主要為大家詳細(xì)介紹了vue+element-ui實(shí)現(xiàn)頭部導(dǎo)航欄組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue實(shí)現(xiàn)點(diǎn)擊當(dāng)前行變色

    Vue實(shí)現(xiàn)點(diǎn)擊當(dāng)前行變色

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)點(diǎn)擊當(dāng)前行變色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12

最新評(píng)論

六枝特区| 互助| 汉川市| 松江区| 米林县| 汨罗市| 保德县| 陕西省| 石棉县| 临汾市| 行唐县| 宁陵县| 都兰县| 洛扎县| 安塞县| 新绛县| 云浮市| 河北区| 读书| 永仁县| 收藏| 武宣县| 思茅市| 鹤壁市| 三河市| 道孚县| 耒阳市| 新营市| 婺源县| 夏邑县| 河东区| 瑞丽市| 宜都市| 湟源县| 同江市| 丰宁| 广东省| 冷水江市| 得荣县| 大同市| 修文县|