亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3新特性Suspense和Teleport應(yīng)用場(chǎng)景分析

 更新時(shí)間:2024年07月02日 10:36:17   作者:扶蘇1002  
本文介紹了Vue2和Vue3中的Suspense用于處理異步請(qǐng)求的加載提示,以及如何在組件間實(shí)現(xiàn)動(dòng)態(tài)加載,同時(shí),Teleport技術(shù)展示了如何在DOM中靈活地控制組件的渲染位置,解決布局問題,感興趣的朋友跟隨小編一起看看吧

一、Suspense【試驗(yàn)性,可能變動(dòng),生產(chǎn)環(huán)境請(qǐng)勿使用】

官方說明:在正確渲染組件之前進(jìn)行一些異步請(qǐng)求是很常見的事。suspense允許將等待過程提升到組件樹中處理,而不是在單個(gè)組件中。

實(shí)例: 有一個(gè)組件的一些數(shù)據(jù)需要異步請(qǐng)求,請(qǐng)求完成后再渲染。為了顯示友好,我們會(huì)在請(qǐng)求返回前顯示一個(gè)Loading。進(jìn)入頁面,顯示 Loading,3秒后,顯示為 Hello

1.1. vue2實(shí)現(xiàn)

在vue2中,通常我們是定義一個(gè)變量來操作這個(gè)loading的顯示與否

<template>
  <div class="pager">
    <div v-if="loading">Loading</div>
    <div v-else>{{data}}</div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        loading: true,
        data: ''
      }
    },
    created() {
      this.load();
    },
    methods: {
      load() {
        this.loading = true;
        return new Promise((resolve) => {
		  setTimeout(()=>{
		    this.data= 'hello'
            this.loading = false;
			resolve('hello')
		  }, 3000)
	   })
      }
    }
  }
</script>

1.2. vue3-suspense 實(shí)現(xiàn)

1.2.1. 父組件

//父組件
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
	<suspense>
	  <template #default>
	    <HelloWorld/>
	  </template>
	  <template #fallback>
			Loading
		</template>
	</suspense>
</template>

1.2.2. 子組件-helloWold

//子組件 - HelloWorld
<script setup>
import { ref } from 'vue';
const data = ref('');
const load = function() {
	return new Promise((resolve) => {
		setTimeout(()=>{
			data.value = 'hello'
			resolve('hello')
		}, 3000)
	})
}
await load(); 
</script>
<template>
  {{data}}
</template>

關(guān)鍵點(diǎn): await將setup隱性添加了一個(gè)async的關(guān)鍵字,也就是 Promise的返回
注意事項(xiàng): 子組件的加載方式為異步加載 ,或者子組件的setup應(yīng)返回一個(gè)Promise,async關(guān)鍵字為隱性的Promise返回。

二、Teleport【傳送】

遠(yuǎn)距離傳送, 可以將teleport內(nèi)的element移到組件外的特定位置。

官方說明: Teleport 提供了一種干凈的方法,允許我們控制在DOM中哪個(gè)父節(jié)點(diǎn)下渲染了 HTML,而不必求助于全局狀態(tài)或?qū)⑵洳鸱譃閮蓚€(gè)組件。

優(yōu)點(diǎn): 添加組件的靈活性,原先由于布局、層級(jí)等原因【類似按鈕和觸發(fā)彈窗等】,需要拆分到不同位置【不同組件】的相關(guān)聯(lián)操作,也可以更好的封裝起來。

props:【官方摘要】

  • to[string]。必填,必須是有效的查詢選擇器或 HTMLElement (如果在瀏覽器環(huán)境中使用)。指定將在其中移動(dòng) 內(nèi)容的目標(biāo)元素
  • disabled[boolean]??蛇x,此屬性可用于禁用 的功能,這意味著其插槽內(nèi)容將不會(huì)移動(dòng)到任何位置,而是在你在周圍父組件中指定了 的位置渲染。

Teleport 是一種能夠?qū)⑽覀兊哪0逡苿?dòng)到 DOM 中 Vue app 之外的其他位置的技術(shù)。

2.1. Teleport用法

用法非常簡(jiǎn)單,只需要使用 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。

2.2. 應(yīng)用場(chǎng)景

當(dāng)自己封裝一個(gè)彈窗的時(shí)候,我們使用 position: fixed,當(dāng)父元素使用 transform或者filter濾鏡的時(shí)候,會(huì)使得position: fixed降級(jí)為absolute,這個(gè)時(shí)候我們就可以利用Teleport,把元素追加到body上面

position:fixed 降級(jí)為absolute的問題 見文末補(bǔ)充介紹

// 渲染到body標(biāo)簽下
<teleport to="body">
  <Modal></Modal>
</teleport>

補(bǔ)充:position:fixed 降級(jí)為absolute的問題

position:fixed 降級(jí)為absolute的問題

本篇文章匯總一下position:fixed 降級(jí)為absolute的情況

transform影響fixed

元素設(shè)置position:fixed后大家都知道可以讓元素不跟隨滾動(dòng)條滾動(dòng)(固定到視口),但是transform可以把position:fixed干掉讓其降級(jí)成absolute。

<div style="transform:scale(1);">
    <img src="mm1.jpg"style="position:fixed;" />
</div>

本身應(yīng)該不動(dòng)的圖片因?yàn)楦讣?jí)設(shè)置了transform而變成了absolute的效果。

filter

CSS3濾鏡(filter)

CSS3 中filter濾鏡屬性,也會(huì)把position:fixed干掉讓其降級(jí)成absolute。

到此這篇關(guān)于Vue3新特性Suspense和Teleport的文章就介紹到這了,更多相關(guān)Vue3 Suspense和Teleport內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue 獲取元素額外生成的data-v-xxx操作

    vue 獲取元素額外生成的data-v-xxx操作

    這篇文章主要介紹了vue 獲取元素額外生成的data-v-xxx操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Vue 全家桶實(shí)現(xiàn)移動(dòng)端酷狗音樂功能

    Vue 全家桶實(shí)現(xiàn)移動(dòng)端酷狗音樂功能

    這篇文章主要介紹了Vue 全家桶實(shí)現(xiàn)移動(dòng)端酷狗音樂功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • vue-dplayer視頻播放器組件的使用詳解

    vue-dplayer視頻播放器組件的使用詳解

    Vue-DPlayer是一個(gè)易于使用、高性能的基于Vue.js的視頻播放器組件,這篇文章將為大家詳細(xì)介紹一下vue-dplayer視頻播放器組件的安裝與使用,需要的小伙伴可以參考下
    2023-09-09
  • Vue.js學(xué)習(xí)筆記之常用模板語法詳解

    Vue.js學(xué)習(xí)筆記之常用模板語法詳解

    本篇文章主要介紹了Vue.js學(xué)習(xí)筆記之常用模板語法詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式

    Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式

    近期學(xué)習(xí)vue3的父子組件之間的傳值,發(fā)現(xiàn)跟vue2的并沒有太大的區(qū)別,這篇文章主要給大家介紹了關(guān)于Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Vue-cli assets SubDirectory及PublicPath區(qū)別詳解

    Vue-cli assets SubDirectory及PublicPath區(qū)別詳解

    這篇文章主要介紹了Vue-cli assets SubDirectory及PublicPath區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • vue多頁面項(xiàng)目中路由使用history模式的方法

    vue多頁面項(xiàng)目中路由使用history模式的方法

    這篇文章主要介紹了vue多頁面項(xiàng)目中路由如何使用history模式,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解vue中多個(gè)有順序要求的異步操作處理

    詳解vue中多個(gè)有順序要求的異步操作處理

    這篇文章主要介紹了vue中多個(gè)有順序要求的異步操作處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • vue實(shí)現(xiàn)上傳圖片添加水印(升級(jí)版)

    vue實(shí)現(xiàn)上傳圖片添加水印(升級(jí)版)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)上傳圖片添加水印的升級(jí)版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • vue項(xiàng)目熱更新的坑及解決

    vue項(xiàng)目熱更新的坑及解決

    這篇文章主要介紹了vue項(xiàng)目熱更新的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)的大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論