亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

vue中keep-alive組件的用法示例

瀏覽:13日期:2022-09-29 15:14:51
問題描述(什么是keep-alive) keep-alive顧名思義,保持活躍。保持誰活躍呢? 首先我們知道,因為vue就是組件化編程,一個.vue文件就是一個組件。就像萬事萬物一樣,都有從出生到消亡的生命周期過程,vue的組件也是一樣,也有自己的生命周期,比如create創建組件、mounted往組件上掛數據、update更新組件上掛的數據,destroy把組件實例銷毀。 所以使用keep-alive就是保持組件活躍,不會被destroy銷毀掉,就一直還活著,組件沒有被銷毀掉的話,組件上掛載的數據就還存在,所以狀態就可以保留,所以,keep-alive就可以保持組件的狀態。

http協議的請求頭里面也有一個keep-alive,保持http通話,這樣:Connection: keep-alive 功能雖然不一樣,但是思想上是一樣的即為~保持狀態活躍

小demo,看一下keep-alive的使用效果

demo分為上面的路由導航部分,下面的內容區部分。點擊上面的路由導航,路由視圖渲染對應的路由組件。效果圖如下:

未使用keep-alive的效果圖

vue中keep-alive組件的用法示例

對應代碼

// #App.vue中<template> <div class='box'> <!-- 路由導航 --> <div class='nav'> <router-link to='/'>去home頁面</router-link> <router-link to='/about'>去about頁面</router-link> <router-link to='/detail'>去detail頁面</router-link> </div> <!-- 路由導航對應的內容區 --> <main> <router-view></router-view> </main> </div></template>// home.vue中,放置一個復選框<el-checkbox v-model='checked'>備選項</el-checkbox>// about.vue中,放置一個輸入框<el-input v-model='input' placeholder='請輸入內容'></el-input>// detail.vue中方式一個下拉框<el-select v-model='value' placeholder='請選擇'> <el-option v-for='item in options' :key='item.value' :label='item.label' :value='item.value' > </el-option></el-select>

分析

我們發現,當我們沒有使用keep-alive組件包裹住router-view視圖組件的時候,左邊~我們在去home頁面勾選了,在去about頁面輸入了,在去detail頁面下拉選擇了,離開這個路由頁面,再回來時,我們發現我們之前做的操作,勾選、輸入、下拉選擇都不存在了,之前的狀態都沒了。原因很簡單,當離開這個路由頁面的時候,會觸發這個路由頁面對應組件上的destroy鉤子方法,然后這個路由頁面對應的組件就被銷毀了,組件銷毀了,組件上的掛載的數據也就啥也沒有了。 與此同時,我們可以看到在右邊的Vue.js devtools工具中,router-view視圖層始終只是home、about、detail組件來回切換,組件來回切換,其實就是組件不斷的創建、銷毀的過程。加下來我們看看使用keep-alive的效果。 使用keep-alive的效果圖

vue中keep-alive組件的用法示例

對應代碼

<template> <div class='box'> <!-- 路由導航 --> <div class='nav'> <router-link to='/'>去home頁面</router-link> <router-link to='/about'>去about頁面</router-link> <router-link to='/detail'>去detail頁面</router-link> </div> <!-- 路由導航對應的內容區 --> <main> <keep-alive> <!-- 使用keep-alive包了一層,就可以緩存啦 --><router-view></router-view> </keep-alive> </main> </div></template>

分析

我們給視圖層組件使用keep-alive包住以后,我們發現,我們勾選、輸入、下拉選擇的內容,在路由來回切換的時候,就不會丟失了,即使用keep-alive保存了之前的組件狀態

與此同時,我們可以看到在右邊的Vue.js devtools工具中,在router-view視圖中對應的,切換過去的組件已經處于inactive狀態,inactive英文意思是不活動的、未使用的,即已經緩存的,沒有銷毀的。所以組件上的我們所做的操作、組件的狀態就被緩存了,所以我們勾選的、輸入的、下拉選擇的都還在。

Vue.js devtools挺好用,可以通過谷歌下載,vue開發中的很好的工具

引出問題

看到這里我們發現,直接加上keep-alive的話,會把所有的router-view層級下的視圖的組件都緩存了,不過有的時候,我們只想緩存部分,不想緩存所有的,那這怎么辦呢?沒關系,大佬們已考慮到了,已經提前為我們解決好了,就是keep-alive中的include、exclude屬性

include和exclude指定是否緩存某些組件

include屬性

include 包含的意思。值為字符串或正則表達式或數組。只有組件的名稱與include的值相同的才會被緩存,即指定哪些被緩存,可以指定多個被緩存。這里以字符串為例,指定多個組件緩存,語法是用逗號隔開。如下:

// 指定home組件和about組件被緩存<keep-alive include='home,about' > <router-view></router-view></keep-alive>

exclude屬性

exclude相當于include的反義詞,就是除了的意思,指定哪些組件不被緩存,用法和include類似,如下:

// 除了home組件和about組件別的都緩存,本例中就是只緩存detail組件<keep-alive exclude='home,about' > <router-view></router-view></keep-alive>

以include='about,detail'為例的效果圖

語法的意思是,只緩存about和detail,別的組件不緩存。我們看下圖的vue工具,也可以看出來,緩存的組件,不處于對應展示的路由下,就會成為inactive狀態。

vue中keep-alive組件的用法示例

keep-alive除了include和exclude屬性之外,還有一個屬性就是max屬性,這個max一般情況用的不是太多,主要目的就是控制一下被緩存的組件的個數,后緩存的就會把先緩存的給擠掉線了,也是相當于緩存優化的一中策略了。畢竟適當緩存提高用戶體驗,緩存過渡,電腦變卡。

include和exclude的屬性值是組件的名稱

include和exclude的屬性值是組件的名稱,也就是組件的name屬性值,也就是如下的name屬性值。

<script> export default { name: 'App' // ... };</script>

引出問題

我們知道組件中都有對應的邏輯js部分,而且組件要發請求獲取數據的,一般情況下,我們都是在created或者mounted鉤子中去發請求,向后端的大佬要數據的,關于使用keep-alive后的組件的鉤子函數的問題,我們需要注意一下

使用keep-alive的鉤子函數執行順序問題

首先使用了keep-alive的組件以后,組件上就會自動加上了activated鉤子和deactivated鉤子。

activated 當組件被激活(使用)的時候觸發 可以簡單理解為進入這個頁面的時候觸發 deactivated 當組件不被使用(inactive狀態)的時候觸發 可以簡單理解為離開這個頁面的時候觸發

進入組件和離開組件鉤子執行順序

假設我們只緩存home組件,我們先看一下代碼,再在鉤子中打印出對應的順序。就知道鉤子執行的順序了,自己動手印象深刻

代碼如下

<template><div> <el-checkbox v-model='checked'>備選項</el-checkbox></div></template><script>export default {name: 'home',data() { return { checked: false } },created() { console.log('我是created鉤子');},mounted() { console.log('我是mounted鉤子');},activated() { console.log('我是activated鉤子');},deactivated() { console.log('我是deactivated鉤子');},beforeDestroy() { console.log('我是beforeDestroy鉤子');所以我們可以得出結論:},};</script>

進入組件打印結果如下

我是created鉤子我是mounted鉤子我是activated鉤子

離開組件打印結果如下

我是deactivated鉤子

得出結論

初始進入和離開 created ---> mounted ---> activated --> deactivated后續進入和離開 activated --> deactivated

所以我們可以在activated 和deactivated鉤子中去做一些邏輯處理,這兩個鉤子有點類似mounted和beforeDestroy鉤子,但是還是不一樣。畢竟使用keep-alive不會銷毀組件

keep-alive的應用場景舉例 查看表格某條數據詳情頁,返回還是之前的狀態,比如還是之前的篩選結果,還是之前的頁數等 填寫的表單的內容路由跳轉返回還在,比如input框、下選擇拉框、開關切換等用戶輸入了一大把東西,跳轉再回來不能清空啊,不能讓用戶再寫一遍啊,是吧老鐵 反正就是保留之前的狀態,具體應用場景其實也有很多,在此不贅述...

補充

上述我們使用的是keep-alive包裹router-view的小案例來講解的,實際上keep-alive一般情況下,要么包裹router-view,要么包裹動態組件component。代碼寫法實際上是一樣的。包裹動態組件的用法如下:

<keep-alive include='home' exclude='about'> <component :is='whichComponent'></component></keep-alive>

keep-alive的include和exclude屬性也支持v-bind的語法,所以也是很靈活的。

總結

到此這篇關于vue中keep-alive組件用法的文章就介紹到這了,更多相關vue keep-alive組件內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
主站蜘蛛池模板: 国产成人v爽在线免播放观看 | 国产美女啪啪 | 黄色免费在线观看网址 | 高清不卡 | 亚洲成人精品视频 | 亚洲一区无码中文字幕 | 精品国产免费一区二区三区五区 | a毛片免费播放全部完整 | 美女污污视频网站 | 久久国产精品只做精品 | 婷婷色视频 | 91香蕉视频在线观看免费 | 免费一级黄色 | 亚洲日本人成中文字幕 | 日韩精品特黄毛片免费看 | 欧美亚洲视频一区 | 黄网在线观看网址入口 | 求免费黄色网址 | 欧美亚洲精品一区二三 | 欧美日韩在线播放成人 | 日本中文字幕有码 | 草草视频免费在线观看 | 岛国片在线播放 | 免费一级特黄特色大片∵黄 | 国产成人毛片视频不卡在线 | 女女在线视频 | 在线免费观看色 | 欧美成人观看免费版 | 欧美精品国产制服第一页 | 看中国一级毛片 | 亚洲香蕉久久综合网 | 色噜噜狠狠在爱丁香 | 国产精品入口在线看麻豆 | 99久久婷婷国产综合精品hsex | 亚洲天堂高清 | 一级做a爰片久久毛片图片 一级做a爰片久久毛片看看 | 久久婷婷丁香七月色综合 | 亚洲欧美成人一区二区在线电影 | 久久国产精品-国产精品 | 亚洲毛片在线免费观看 | 另类欧美亚洲 |