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

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

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

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

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

我們有5頁(yè):

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

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

image.png

image.png

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

image.png

這種方法存在兩個(gè)主要問題:

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

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

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

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

image.png

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

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

image.png

為了將布局置于頁(yè)面之上,我們?cè)贏pp.vue組件中創(chuàng)建了一個(gè)動(dòng)態(tài)組件。

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

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

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

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

image.png

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

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

布局只有在 route 改變時(shí)才會(huì)變化。

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

例如:

  • 在一段時(shí)間后顯示一個(gè)鎖定的頁(yè)面
  • 為了顯示一個(gè)離線頁(yè)面
  • 為了顯示錯(cuò)誤頁(yè)面

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

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

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

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

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

以下是步驟:

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

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

image.png

現(xiàn)在我們也可以將路由中的元數(shù)據(jù)僅更改為字符串,因?yàn)樗鼈儗⒂成涞缴鲜鰧?duì)象:

image.png

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

image.png

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

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

這也是不必要的,因?yàn)槲覀冎恍枰勒麄€(gè)組件何時(shí)發(fā)生了變化,而不是嵌套值何時(shí)發(fā)生了變化。

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

以下是一個(gè)例子,展示了 Home 布局可以通過一鍵點(diǎn)擊進(jìn)行更改。

image.png

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

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

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

相關(guān)文章

  • Vue3中使用Element?Plus時(shí)el-icon無法顯示的問題解決

    Vue3中使用Element?Plus時(shí)el-icon無法顯示的問題解決

    我們的Vue前端一般都是用的ElementUI,其中按鈕可能用到的比較多,官方里面有自帶的一些默認(rèn)圖標(biāo),下面這篇文章主要給大家介紹了關(guān)于Vue3中使用Element?Plus時(shí)el-icon無法顯示的問題解決,需要的朋友可以參考下
    2022-03-03
  • vue-router beforeEach跳轉(zhuǎn)路由驗(yàn)證用戶登錄狀態(tài)

    vue-router beforeEach跳轉(zhuǎn)路由驗(yàn)證用戶登錄狀態(tài)

    這篇文章主要介紹了vue-router beforeEach跳轉(zhuǎn)路由驗(yàn)證用戶登錄狀態(tài),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • 詳解vue-cli3多頁(yè)應(yīng)用改造

    詳解vue-cli3多頁(yè)應(yīng)用改造

    這篇文章主要介紹了詳解vue-cli3多頁(yè)應(yīng)用改造,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-06-06
  • Vue中JSX的基本用法及高級(jí)部分

    Vue中JSX的基本用法及高級(jí)部分

    JSX是一種Javascript的語(yǔ)法擴(kuò)展,JSX = Javascript + XML,即在 Javascript里面寫XML,因?yàn)?nbsp;JSX 的這個(gè)特性,所以他即具備了 Javascript的靈活性,同時(shí)又兼具h(yuǎn)tml的語(yǔ)義化和直觀性,這篇文章主要給大家介紹了關(guān)于Vue中JSX的基本用法及高級(jí)部分的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue elementui異步給dom賦值無效問題

    vue elementui異步給dom賦值無效問題

    這篇文章主要介紹了vue elementui異步給dom賦值無效問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • vue如何自定義封裝API組件

    vue如何自定義封裝API組件

    這篇文章主要介紹了vue如何自定義封裝API組件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue使用ArcGis?API?for?js創(chuàng)建地圖實(shí)現(xiàn)示例

    vue使用ArcGis?API?for?js創(chuàng)建地圖實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了vue使用ArcGis?API?for?js創(chuàng)建地圖實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • VUE組件簡(jiǎn)明講解

    VUE組件簡(jiǎn)明講解

    組件是什么?組件是用基礎(chǔ)的元素組成的復(fù)雜的、可以重復(fù)使用的代碼單元,就相當(dāng)于疊疊樂一樣的快件,可以將這些復(fù)用的代碼封裝其起來構(gòu)成的組件可需要的時(shí)候進(jìn)行調(diào)用
    2022-08-08
  • Vue的v-if和v-show的區(qū)別圖文介紹

    Vue的v-if和v-show的區(qū)別圖文介紹

    這篇文章主要介紹了Vue的v-if和v-show的區(qū)別圖文介紹,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • vue3.x?的shallowReactive?與?shallowRef?使用場(chǎng)景分析

    vue3.x?的shallowReactive?與?shallowRef?使用場(chǎng)景分析

    在Vue3.x中,`shallowReactive`和`shallowRef`是用于創(chuàng)建淺層響應(yīng)式數(shù)據(jù)的API,它們與`reactive`和`ref`類似,本文介紹vue3.x??shallowReactive?與?shallowRef的使用場(chǎng)景,感興趣的朋友一起看看吧
    2025-02-02

最新評(píng)論

永济市| 长海县| 昌平区| 丹东市| 永仁县| 光泽县| 翁牛特旗| 子长县| 陇西县| 永胜县| 竹溪县| 丽水市| 禄劝| 册亨县| 区。| 修武县| 鹿泉市| 建始县| 三河市| 连州市| 盘山县| 辰溪县| 泽州县| 东源县| 斗六市| 衢州市| 武隆县| 镇坪县| 宁城县| 江都市| 连平县| 济南市| 商都县| 双辽市| 安吉县| 阿拉尔市| 北川| 绵竹市| 辽源市| 黄梅县| 留坝县|