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

深入理解與使用keep-alive(配合router-view緩存整個路由頁面)

 更新時間:2018年09月25日 14:53:51   作者:悠揚(yáng)小Q  
這篇文章主要介紹了深入理解與使用keep-alive(配合router-view緩存整個路由頁面),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在搭建 vue 項目時,有某些組件沒必要多次渲染,所以需要將組件在內(nèi)存中進(jìn)行‘持久化',此時 <keep-alive> 便可以派上用場了。 <keep-alive> 可以使被包含的組件狀態(tài)維持不變,即便是組件切換了,其內(nèi)的狀態(tài)依舊維持在內(nèi)存之中。在下一次顯示時,也不會重現(xiàn)渲染。

PS:<keep-alive><transition>相似,只是一個抽象組件,它不會在DOM樹中渲染(真實或者虛擬都不會),也不在父組件鏈中存在,比如:你永遠(yuǎn)在 this.$parent 中找不到 keep-alive 。

1. keep-alive的基礎(chǔ)使用

最基礎(chǔ)的一般是結(jié)合動態(tài)組件去使用:

<keep-alive>
  <component :is="currentView"></component>
</keep-alive>

new Vue({
  el: '#app',
  data(){
    return {
      currentView: Test //Test為引入的子組件
    }
  }
})

不過此種方式并無太大的實用意義。

2. 生命周期鉤子

被包含在 <keep-alive> 中創(chuàng)建的組件,會多出兩個生命周期的鉤子: activateddeactivated

activated

在組件被激活時調(diào)用,在組件第一次渲染時也會被調(diào)用,之后每次keep-alive激活時被調(diào)用。

deactivated

在組件被停用時調(diào)用。

注意:只有組件被 keep-alive 包裹時,這兩個生命周期才會被調(diào)用,如果作為正常組件使用,是不會被調(diào)用,以及在 2.1.0 版本之后,使用 exclude 排除之后,就算被包裹在 keep-alive 中,這兩個鉤子依然不會被調(diào)用!另外在服務(wù)端渲染時此鉤子也不會被調(diào)用的。

3. 配合router-view使用

有些時候可能需要將整個路由頁面一切緩存下來,也就是將 <router-view> 進(jìn)行緩存。這種使用場景還是蠻多的。

在vue 2.1.0 之前,大部分是這樣實現(xiàn)的:

<!-- template -->
<keep-alive>
  <router-view v-if="$router.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$router.meta.keepAlive"></router-view>

//router配置
new Router({
  routes: [
    {
      name: 'a',
      path: '/a',
      component: A,
      meta: {
        keepAlive: true
      }
    },
    {
      name: 'b',
      path: '/b',
      component: B
    }
  ]
})

這樣配置路由的路由元信息之后,a路由的 $router.meta.keepAlive 便為 true ,而b路由則為 false 。
所以為 true 的將被包裹在 keep-alive 中,為 false 的則在外層。這樣a路由便達(dá)到了被緩存的效果,如果還有想要緩存的路由,只需要在路由元中加入 keepAlive: true 即可。

4. 在2.1.0版本之后

在vue 2.1.0 版本之后,keep-alive 新加入了兩個屬性: include(包含的組件緩存生效) 與 exclude(排除的組件不緩存,優(yōu)先級大于include) 。

includeexclude 屬性允許組件有條件地緩存。二者都可以用逗號分隔字符串、正則表達(dá)式或一個數(shù)組來表示。
當(dāng)使用正則或者是數(shù)組時,一定要使用 v-bind !

<!-- 逗號分隔字符串,只有組件a與b被緩存。這樣使用場景變得更有意義了 -->
<keep-alive include="a,b">
 <component :is="view"></component>
</keep-alive>

<!-- 正則表達(dá)式 (需要使用 v-bind,符合匹配規(guī)則的都會被緩存) -->
<keep-alive :include="/a|b/">
 <component :is="view"></component>
</keep-alive>

<!-- Array (需要使用 v-bind,被包含的都會被緩存) -->
<keep-alive :include="['a', 'b']">
 <component :is="view"></component>
</keep-alive>

有了include之后,再與 router-view 一起使用時便方便許多了:

<!-- 一個include解決了,不需要多寫一個標(biāo)簽,也不需要在路由元中添加keepAlive了 -->
<keep-alive include='a'>
  <router-view></router-view>
</keeo-alive>

5. 需要注意的地方

  • <keep-alive> 先匹配被包含組件的 name 字段,如果 name 不可用,則匹配當(dāng)前組件 componetns 配置中的注冊名稱。
  • <keep-alive> 不會在函數(shù)式組件中正常工作,因為它們沒有緩存實例。
  • 當(dāng)匹配條件同時在 includeexclude 存在時,以 exclude 優(yōu)先級最高(當(dāng)前vue 2.4.2 version)。比如:包含于排除同時匹配到了組件A,那組件A不會被緩存。
  • 包含在 <keep-alive> 中,但符合 exclude ,不會調(diào)用activateddeactivated。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue+element-ui表格自定義列模版的實現(xiàn)

    vue+element-ui表格自定義列模版的實現(xiàn)

    本文主要介紹了vue+element-ui表格自定義列模版的實現(xiàn),通過插槽完美解決了element-ui表格自定義列模版的問題,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • vue3升級常見問題詳細(xì)匯總

    vue3升級常見問題詳細(xì)匯總

    隨著vue3?的發(fā)布和越來越多項目的使用,之前使用?vue2?的項目也不能拉下,vue2?升級?vue3?迫在眉睫,下面這篇文章主要給大家介紹了關(guān)于vue3升級常見問題的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue 指定文字高亮的實現(xiàn)示例

    vue 指定文字高亮的實現(xiàn)示例

    在做文字處理的項目時經(jīng)常會遇到搜索文字并高亮的需求,本文就來介紹vue 指定文字高亮的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Vue非父子組件之間的通信方式詳解

    Vue非父子組件之間的通信方式詳解

    在實際業(yè)務(wù)中,除了父子組件通信外,還有很多非父子組件通信的場景,下面這篇文章主要給大家介紹了關(guān)于Vue非父子組件之間的通信方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • vue源碼中的檢測方法的實現(xiàn)

    vue源碼中的檢測方法的實現(xiàn)

    這篇文章主要介紹了vue源碼中的檢測方法的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 用vue封裝插件并發(fā)布到npm的方法步驟

    用vue封裝插件并發(fā)布到npm的方法步驟

    本篇文章主要介紹了用vue封裝插件并發(fā)布到npm的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Vue實現(xiàn)手機(jī)掃描二維碼預(yù)覽頁面效果

    Vue實現(xiàn)手機(jī)掃描二維碼預(yù)覽頁面效果

    這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)手機(jī)掃描二維碼預(yù)覽頁面效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Vue?(Vuex)中?store?基本用法

    Vue?(Vuex)中?store?基本用法

    Vuex?是一個專為?Vue.js?應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測的方式發(fā)生變化,這篇文章主要介紹了Vue?中?store?基本用法,需要的朋友可以參考下
    2023-01-01
  • Vue簡化用戶查詢/添加功能的實現(xiàn)

    Vue簡化用戶查詢/添加功能的實現(xiàn)

    本文主要介紹了Vue簡化用戶查詢/添加功能的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 關(guān)于VUE點擊父組件按鈕跳轉(zhuǎn)到子組件的問題及解決方案

    關(guān)于VUE點擊父組件按鈕跳轉(zhuǎn)到子組件的問題及解決方案

    本文主要介紹了在Vue框架中,如何通過父組件的點擊事件打開子組件中的彈窗并展示表格內(nèi)容,主要步驟包括在父組件中定義數(shù)據(jù)屬性,創(chuàng)建并定義子組件的彈窗和表格內(nèi)容,通過props屬性和自定義事件實現(xiàn)父子組件間的數(shù)據(jù)傳遞和方法調(diào)用
    2024-10-10

最新評論

湟源县| 永州市| 石棉县| 靖宇县| 密云县| 青神县| 武邑县| 新闻| 密云县| 东港市| 松潘县| 濉溪县| 疏附县| 诸暨市| 秦安县| 同江市| 江北区| 嘉黎县| 永福县| 贵州省| 图木舒克市| 富宁县| 临泉县| 峡江县| 曲靖市| 冷水江市| 五大连池市| 铁岭县| 娄底市| 洞口县| 色达县| 肥城市| 福安市| 丰原市| 赤壁市| 张家川| 江安县| 兖州市| 汤原县| 垣曲县| 海口市|