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

Vue3新特性Suspense和Teleport應用場景分析

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

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

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

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

1.1. vue2實現(xiàn)

在vue2中,通常我們是定義一個變量來操作這個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 實現(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>

關鍵點: await將setup隱性添加了一個async的關鍵字,也就是 Promise的返回
注意事項: 子組件的加載方式為異步加載 ,或者子組件的setup應返回一個Promise,async關鍵字為隱性的Promise返回。

二、Teleport【傳送】

遠距離傳送, 可以將teleport內的element移到組件外的特定位置。

官方說明: Teleport 提供了一種干凈的方法,允許我們控制在DOM中哪個父節(jié)點下渲染了 HTML,而不必求助于全局狀態(tài)或將其拆分為兩個組件。

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

props:【官方摘要】

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

Teleport 是一種能夠將我們的模板移動到 DOM 中 Vue app 之外的其他位置的技術。

2.1. Teleport用法

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

// 渲染到body標簽下
<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. 應用場景

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

position:fixed 降級為absolute的問題 見文末補充介紹

// 渲染到body標簽下
<teleport to="body">
  <Modal></Modal>
</teleport>

補充:position:fixed 降級為absolute的問題

position:fixed 降級為absolute的問題

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

transform影響fixed

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

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

本身應該不動的圖片因為父級設置了transform而變成了absolute的效果。

filter

CSS3濾鏡(filter)

CSS3 中filter濾鏡屬性,也會把position:fixed干掉讓其降級成absolute

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

相關文章

  • Vue?UI框架的主題切換功能實現(xiàn)

    Vue?UI框架的主題切換功能實現(xiàn)

    在如今,很多網(wǎng)頁已經(jīng)可以手動切換明亮模式和黑暗模式,網(wǎng)頁的主題切換已經(jīng)成為了一個常用的需求,因此,本文將從常見框架的處理方式總結一些相關的操作,對vue?ui框架主題切換功能感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • vue3之Suspense加載異步數(shù)據(jù)的使用

    vue3之Suspense加載異步數(shù)據(jù)的使用

    本文主要介紹了vue3之Suspense加載異步數(shù)據(jù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • vue.js常用的自定義校驗方式

    vue.js常用的自定義校驗方式

    文章介紹了使用ElementUI時如何自定義校驗規(guī)則,包括將校驗邏輯封裝為JavaScript文件,通過`validator`和`trigger`屬性定義校驗方法和觸發(fā)條件等
    2026-04-04
  • Vue 電商后臺管理項目階段性總結(推薦)

    Vue 電商后臺管理項目階段性總結(推薦)

    這篇文章主要介紹了Vue 電商后臺管理項目階段性總結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • vue 監(jiān)聽 Treeselect 選擇項的改變操作

    vue 監(jiān)聽 Treeselect 選擇項的改變操作

    這篇文章主要介紹了vue 監(jiān)聽 Treeselect 選擇項的改變操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue日歷組件的封裝方法

    vue日歷組件的封裝方法

    這篇文章主要為大家詳細介紹了vue封裝一個日歷組件的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 詳解vue 命名視圖

    詳解vue 命名視圖

    這篇文章主要介紹了vue 命名視圖的相關知識,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Vue項目Element表格對應字段映射顯示方法:formatter格式化數(shù)據(jù)問題

    Vue項目Element表格對應字段映射顯示方法:formatter格式化數(shù)據(jù)問題

    這篇文章主要介紹了Vue項目Element表格對應字段映射顯示方法:formatter格式化數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue2.0實現(xiàn)分頁組件的實例代碼

    vue2.0實現(xiàn)分頁組件的實例代碼

    這篇文章主要介紹了vue2.0實現(xiàn)分頁組件的實例代碼,需要的朋友可以參考下
    2017-06-06
  • 如何解決elementUI打包上線后icon圖標偶爾亂碼問題

    如何解決elementUI打包上線后icon圖標偶爾亂碼問題

    文章描述了在使用若依框架開發(fā)過程中遇到的圖標亂碼問題,通過分析發(fā)現(xiàn)是由于sass編譯器將Unicode編碼轉換為明文導致的,文章提供了四種處理方法:使用css-unicode-loader、升高sass版本、替換element-ui的樣式文件和更換打包壓縮方式
    2025-01-01

最新評論

锡林浩特市| 和田县| 涞水县| 平罗县| 会泽县| 沙河市| 阳江市| 城步| 万源市| 西乌| 于都县| 鄂托克前旗| 双鸭山市| 承德县| 东方市| 怀仁县| 泾源县| 宁南县| 平南县| 九江市| 乐东| 五家渠市| 读书| 时尚| 子长县| 湘西| 民和| 太保市| 鄂温| 遵化市| 班玛县| 阿拉善左旗| 共和县| 桂阳县| 泰安市| 平果县| 郑州市| 嵊泗县| 兰坪| 乐亭县| 新津县|