欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法

 更新時間:2023年08月17日 09:13:28   作者:王大冶  
布局是中大型網(wǎng)站或應(yīng)用的基礎(chǔ),假設(shè)你正在創(chuàng)建一個網(wǎng)頁應(yīng)用,它包括主頁、營銷頁面和應(yīng)用頁面,你不會想要為每一頁重復(fù)所有的工作,對吧,與Nuxt不同,Vue 3并沒有內(nèi)置的布局系統(tǒng),但是別擔(dān)心,這里將向你展示3種簡單的方法來實現(xiàn)這一點,需要的朋友可以參考下

1. 將布局導(dǎo)入為常規(guī)組件以創(chuàng)建布局系統(tǒng)

這是創(chuàng)建布局系統(tǒng)的最簡單方法,但其靈活性較差。為了簡化解釋,我們就用我上面的例子來說明吧。

我們有5頁:

  • 首頁(將有特定的布局)
  • 關(guān)于和聯(lián)系(將具有營銷布局)
  • Inside1和Inside2(將擁有應(yīng)用程序布局)

我們將創(chuàng)建一個名為“layouts”的文件夾,在其中我們將創(chuàng)建包含插槽的三個布局組件。

image.png

image.png

然后,你只需像這樣在每個頁面組件中導(dǎo)入你需要的布局:

image.png

這種方法存在兩個主要問題:

  1. 需要在每個頁面中導(dǎo)入布局,當(dāng)然,你可以將這些組件設(shè)為全局的,但你仍然需要每次手動包裝你的內(nèi)容。
  2. 每次路由更改時,布局都將被卸載并銷毀,即使下一個路由使用相同的布局。

這會對性能產(chǎn)生一點影響,但真正的問題是,即使它們使用相同的布局,你也無法在一個路由到另一個路由之間保持狀態(tài)。

2. 利用Vue Router,路由的元屬性,以及動態(tài)組件來創(chuàng)建布局系統(tǒng)

為了避免在每個頁面中導(dǎo)入布局,我們可以選擇在路由器中一次性導(dǎo)入,然后為每個路由分配其關(guān)聯(lián)的布局。

image.png

如此處所示,我們直接將每個布局組件對象與每個路由的元數(shù)據(jù)屬性關(guān)聯(lián)。我們只導(dǎo)入了一次所有的布局。

為了避免布局被卸載和破壞,我們將把布局放在頁面之上,而不是放在頁面內(nèi)部。

image.png

為了將布局置于頁面之上,我們在App.vue組件中創(chuàng)建了一個動態(tài)組件。

在模板中,我們可以通過$route訪問當(dāng)前的路由,并且在每個路由上,我們都可以訪問其元屬性,這意味著我們可以訪問之前設(shè)置的布局組件對象。

如果路由在元對象上沒有布局屬性,我們將回退到使用DIV標(biāo)簽的字符串。

我們只需導(dǎo)入一次布局,無需在每個頁面中導(dǎo)入或包裝布局,現(xiàn)在,我們不會有性能問題,而且在從具有相同布局的兩個路由導(dǎo)航時,我們可以保持狀態(tài)。

所以,我的主頁組件現(xiàn)在看起來像這樣:

image.png

無需再包裝任何東西;所有的事情都在App.vue中處理,圍繞的 <router-view> 每當(dāng)路由改變時的每個頁面。

這種方法在大多數(shù)使用場景中都有效,但它存在一個問題

布局只有在 route 改變時才會變化。

如果你需要在不改變路由的情況下動態(tài)改變布局,那么這種方法將不起作用。只有在少數(shù)情況下,你可能會想要動態(tài)地改變布局,但這是有可能發(fā)生的。

例如:

  • 在一段時間后顯示一個鎖定的頁面
  • 為了顯示一個離線頁面
  • 為了顯示錯誤頁面

那些示例可以通過全屏 modal 系統(tǒng)來實現(xiàn),但是 modal 很容易通過控制臺從DOM中刪除。

3. 使用 ShallowRef,Provide,Inject 以及 Vue Router 的 afterEach鉤子來創(chuàng)建布局系統(tǒng)

為了能夠在任何地方更改布局,而不僅僅是在路由更改時,我們需要在整個應(yīng)用程序中共享布局的狀態(tài)。

我們可以使用 Vuex 或 Pina 來實現(xiàn)這個功能,但在這里我們還是保持簡單吧。

我們將使用Vue的原生響應(yīng)性系統(tǒng),配合組合api。

以下是步驟:

  • 在App.vue中,我們將創(chuàng)建一個布局常量,該常量包含一個shallowRef以保存當(dāng)前的布局組件。
  • 在一個單獨的文件中,我們將創(chuàng)建一個包含每個布局名稱及其組件的鍵/值對的對象
  • 在App.vue或其他地方,我們將使用路由器的afterEach鉤子來監(jiān)聽每次路由變化,以動態(tài)地改變當(dāng)前的布局。
  • 在App.vue中,我們將向其后代提供布局常量,以便App.vue的樹中的任何組件都可以注入布局常量來改變其值。
  • 在路由中,我們將把元數(shù)據(jù)上的每個布局屬性更改為僅包含要選擇的布局名稱的字符串。

那么,這里是第二步,一個包含所有布局并作為對象展示的文件:

image.png

現(xiàn)在我們也可以將路由中的元數(shù)據(jù)僅更改為字符串,因為它們將映射到上述對象:

image.png

現(xiàn)在讓我們把所有這些結(jié)合在一起:

image.png

我們?yōu)槭裁词褂?shallowRef 而不是 ref ?

由于我們正在存儲一個組件,這是一個包含許多嵌套值的復(fù)雜對象,使用 ref 會導(dǎo)致性能問題。

這也是不必要的,因為我們只需要知道整個組件何時發(fā)生了變化,而不是嵌套值何時發(fā)生了變化。

那么,我們?nèi)绾卧诼酚善髦鈩討B(tài)改變布局呢?嗯,隨處都可以!

以下是一個例子,展示了 Home 布局可以通過一鍵點擊進行更改。

image.png

如你所見,我們現(xiàn)在可以注入并訪問布局的狀態(tài),并將其更改為我們想要的任何組件。多虧了響應(yīng)性,它將動態(tài)地改變App.vue中的組件。

如前所述,對于共享狀態(tài),我們可以使用Vuex或Pinia來做同樣的事情,但對于大多數(shù)情況來說,這已經(jīng)足夠了。

以上就是使用Vue3創(chuàng)建多布局系統(tǒng)的三種方法的詳細內(nèi)容,更多關(guān)于Vue3創(chuàng)建多布局系統(tǒng)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue.directive 實現(xiàn)元素scroll邏輯復(fù)用

    Vue.directive 實現(xiàn)元素scroll邏輯復(fù)用

    這篇文章主要介紹了Vue.directive 實現(xiàn)元素scroll邏輯復(fù)用功能,文中給大家提到元素實現(xiàn)滾動的條件有兩個,具體內(nèi)容詳情大家參考下本文
    2019-11-11
  • Vue2+ElementUI利用計算屬性實現(xiàn)搜索框功能

    Vue2+ElementUI利用計算屬性實現(xiàn)搜索框功能

    這篇文章主要為大家詳細介紹了Vue2和ElementUI如何利用計算屬性實現(xiàn)搜索框功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2024-11-11
  • Vue實現(xiàn)計算器計算效果

    Vue實現(xiàn)計算器計算效果

    這篇文章主要為大家詳細介紹了Vue實現(xiàn)計算器計算效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 通過命令行生成vue項目框架的方法

    通過命令行生成vue項目框架的方法

    本篇文章主要介紹了通過命令行生成vue項目框架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • vue調(diào)取電腦攝像頭實現(xiàn)拍照功能

    vue調(diào)取電腦攝像頭實現(xiàn)拍照功能

    這篇文章主要為大家詳細介紹了vue調(diào)取電腦攝像頭實現(xiàn)拍照功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • axios+Vue實現(xiàn)上傳文件顯示進度功能

    axios+Vue實現(xiàn)上傳文件顯示進度功能

    這篇文章主要介紹了axios+Vue上傳文件顯示進度效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue項目登錄成功后退出時清空sessionId和userId的問題

    vue項目登錄成功后退出時清空sessionId和userId的問題

    這篇文章主要介紹了vue項目登錄成功后退出時清空sessionId和userId的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Vue 組件的掛載與父子組件的傳值實例

    Vue 組件的掛載與父子組件的傳值實例

    這篇文章主要介紹了Vue 組件的掛載與父子組件的傳值實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 深入理解Vue響應(yīng)式原理及其實現(xiàn)方式

    深入理解Vue響應(yīng)式原理及其實現(xiàn)方式

    Vue的響應(yīng)式原理是Vue最核心的特性之一,也是Vue能夠為開發(fā)者提供高效便捷的開發(fā)體驗的重要原因之一,這篇文章主要介紹了響應(yīng)式的原理及其實現(xiàn)方式,需要詳細了解可以參考下文
    2023-05-05
  • 淺談Vue 初始化性能優(yōu)化

    淺談Vue 初始化性能優(yōu)化

    本篇文章主要介紹了淺談Vue 初始化性能優(yōu)化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論