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

vue使用keep-alive無效以及include和exclude用法解讀

 更新時(shí)間:2023年07月04日 17:14:11   作者:唐璜Taro  
這篇文章主要介紹了vue使用keep-alive無效以及include和exclude用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用keep-alive無效以及include和exclude用法

最近在修改我司一款醫(yī)療類CMS系統(tǒng),采用的技術(shù)棧是 Vue2.x + Ant-Design-Vue ,用戶提到了一個(gè)需求,希望在切換Tabs多頁簽時(shí),能夠在其他Tabs切換回來后,下方的分頁器頁碼依然可以留在離開前的頁數(shù)。

這里想到的是 使用 Vue中的 keep-alive,去包裹住 router-view,從而實(shí)現(xiàn)路由的緩存

就像這樣

<template>
  <div class="app-main">
    <keep-alive>
      <router-view />
    </keep-alive>
  </div>
</template>

簡(jiǎn)單講一下 keep-alive

keep-alive 是 Vue 提供給開發(fā)者的一個(gè)全局組件,被包裹住的組件,可以保留初始的狀態(tài),避免被重新渲染。(通常和 router-view 配合使用 )

開發(fā)者可以根據(jù)自己的需要,對(duì)想要或者不想要緩存的特定頁面,進(jìn)行緩存。如何實(shí)現(xiàn)呢?

上面說到了,keep-alive是組件,所以接收的是props,接受一個(gè) includeexclude

props

  • include:字符串或正則表達(dá),只有匹配的組件會(huì)被緩存
  • exclude:字符串或正則表達(dá)式,任何匹配的組件都不會(huì)被緩存

不少初次上手keep-alive的,會(huì)發(fā)現(xiàn)被包裹的組件依然沒有被緩存,為什莫會(huì)這樣?

帶著這份疑惑,我們看一下 官方大大怎么說的

匹配首先檢查組件自身的 name 選項(xiàng),若是 name 選項(xiàng)不可用,則匹配它的局部注冊(cè)名稱 (父組件 components選項(xiàng)的鍵值)。匿名組件不能被匹配。

重點(diǎn)來了~

這里的 name 不是 路由表中 meta 下的name,是局部組件中 export default 下的name

<script>
export default {
  name: 'AppMain',
}
</script>

我們通常會(huì)在路由表各個(gè)路由中 的 meta下 中 添加 是否緩存的標(biāo)志位,下意識(shí)的認(rèn)識(shí)是路由表的 name,其實(shí)不然

{
   path: '/a',
   name: 'a',
   component: () => import('src/views/a'),
   meta: { keepAlive: true }
},
{
   path: '/b',
   name: 'a',
   component: () => import('src/views/b'),
   meta: { keepAlive: true }
}

使用中可能遇到的問題

當(dāng)引入keep-alive 的時(shí)候,頁面第一次進(jìn)入,鉤子的觸發(fā)順序created> mounted> activated

退出時(shí)觸發(fā)deactivated。當(dāng)再次進(jìn)入(前進(jìn)或者后退)時(shí),只觸發(fā)activated。

注意:

我們知道 keep-alive之后頁面模板第一次初始化解析變成HTML片段后,再次進(jìn)入就不在重新解析而是讀取內(nèi)存中的數(shù)據(jù),即,只有當(dāng)數(shù)據(jù)變化時(shí),才使用VirtualDOM進(jìn)行diff更新。

有需要的話,頁面進(jìn)入的數(shù)據(jù)獲取應(yīng)該在activated中也放一份。數(shù)據(jù)下載完畢手動(dòng)操作DOM的部分也應(yīng)該在activated中執(zhí)行才會(huì)生效。

所以,有需要的話,應(yīng)該activated中留一份數(shù)據(jù)獲取的代碼,或者不要created部分,直接將created中的代碼轉(zhuǎn)移到activated中。

keep-alive include和exclude無效問題及踩坑

  • include:使該標(biāo)簽作用于所有name屬性的值跟此標(biāo)簽 include的屬性值一致的vue頁面
  • exclude:使該標(biāo)簽不作用于所有name屬性的值跟此標(biāo)簽 exclude的屬性值一致的vue頁面

然后我就掉進(jìn)坑里了,配置了一堆路由的name?。。。。o效?。?!

使用include/exclude 屬性需要給所有vue類的name賦值(注意不是給route的name賦值),否則 include/exclude不生效

正確寫法是

export default {
?name:'a', // include 或 exclude所使用的name
?data () {
?return{
? ? }
? },
}

路由

? ?// 保持 name為a和b的組件
? ?<keep-alive include="a,b">
? ? ? ? <router-view/>
? ?</keep-alive>

vue2.0版本后,keep-alive內(nèi)置組件已經(jīng)封裝了兩個(gè)屬性,include和exclude表示那些組件需要緩存那些組件不需要緩存,用法大致如下:

<keep-alive include="test-keep-alive">
? <!-- 將緩存name為test-keep-alive的組件 -->
? <component></component>
</keep-alive>
<keep-alive include="a,b">
? <!-- 將緩存name為a或者b的組件,結(jié)合動(dòng)態(tài)組件使用 -->
? <component :is="view"></component>
</keep-alive>
<!-- 使用正則表達(dá)式,需使用v-bind -->
<keep-alive :include="/a|b/">
? <component :is="view"></component>
</keep-alive>
<!-- 動(dòng)態(tài)判斷 -->
<keep-alive :include="includedComponents">
? <router-view></router-view>
</keep-alive>
<keep-alive exclude="test-keep-alive">
? <!-- 將不緩存name為test-keep-alive的組件 -->
? <component></component>
</keep-alive>

另外:

activated,deactivated這兩個(gè)生命周期函數(shù)一定是要在使用了keep-alive組件后才會(huì)有的,否則則不存在

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue props 單項(xiàng)數(shù)據(jù)流實(shí)例分享

    vue props 單項(xiàng)數(shù)據(jù)流實(shí)例分享

    在本篇文章里小編給大家分享的是一篇關(guān)于vue props 單項(xiàng)數(shù)據(jù)流實(shí)例分享內(nèi)容,需要的朋友們可以參考下。
    2020-02-02
  • Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法

    Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法

    在 Vue 3 中,如果你想監(jiān)聽 reactive 對(duì)象中的某個(gè)屬性發(fā)生的變化,你可以使用 watch 函數(shù)進(jìn)行監(jiān)聽,watch 函數(shù)允許你觀察 reactive 對(duì)象的某個(gè)屬性或者整個(gè)對(duì)象,所以本文給大家介紹了Vue3監(jiān)聽reactive對(duì)象中屬性變化的方法,需要的朋友可以參考下
    2024-08-08
  • Vue面試中observable原理詳解

    Vue面試中observable原理詳解

    這篇文章主要為大家介紹了vue面試observable原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • vue實(shí)現(xiàn)3D切換滾動(dòng)效果

    vue實(shí)現(xiàn)3D切換滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)偽3D切換滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue實(shí)現(xiàn)聯(lián)動(dòng)選擇

    vue實(shí)現(xiàn)聯(lián)動(dòng)選擇

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)聯(lián)動(dòng)選擇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue-cli3 $ is not defined錯(cuò)誤問題及解決

    Vue-cli3 $ is not defined錯(cuò)誤問題及解決

    這篇文章主要介紹了Vue-cli3 $ is not defined錯(cuò)誤問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue3項(xiàng)目中使用three.js的操作步驟

    vue3項(xiàng)目中使用three.js的操作步驟

    最近在學(xué)習(xí)Three.js相關(guān)的技術(shù),恰逢Vue 3.0正式版也已推出,下面這篇文章主要給大家介紹了關(guān)于vue3項(xiàng)目中使用three.js的操作步驟,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • vue使用canvas實(shí)現(xiàn)移動(dòng)端手寫簽名

    vue使用canvas實(shí)現(xiàn)移動(dòng)端手寫簽名

    這篇文章主要為大家詳細(xì)介紹了基于vue使用canvas實(shí)現(xiàn)移動(dòng)端手寫簽名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Vue3.0 自己實(shí)現(xiàn)放大鏡效果案例講解

    Vue3.0 自己實(shí)現(xiàn)放大鏡效果案例講解

    這篇文章主要介紹了Vue3.0 自己實(shí)現(xiàn)放大鏡效果案例講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 關(guān)于vue-router路由的傳參方式params query

    關(guān)于vue-router路由的傳參方式params query

    這篇文章主要介紹了關(guān)于vue-router路由的傳參方式params query,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論

宁强县| 拜城县| 湛江市| 陈巴尔虎旗| 建阳市| 海宁市| 定远县| 阿巴嘎旗| 大埔县| 英超| 阿巴嘎旗| 虹口区| 平武县| 龙海市| 清涧县| 衡阳市| 阜平县| 乌鲁木齐市| 修文县| 贵溪市| 南木林县| 磐石市| 新余市| 济南市| 凯里市| 海淀区| 泰来县| 山东| 南和县| 东城区| 廉江市| 德安县| 汾西县| 蓝山县| 罗城| 罗田县| 南丹县| 江油市| 汶川县| 博野县| 连州市|