国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

vue 指定組件緩存實例詳解

2019-11-19 14:04:39
字體:
來源:轉載
供稿:網友

keep-alive 簡介

keep-alive 是 Vue 內置的一個組件,可以使被包含的組件保留狀態,或避免重新渲染。

用法也很簡單:

<keep-alive> <component> <!-- 該組件將被緩存! --> </component></keep-alive>

props

include - 字符串或正則表達,只有匹配的組件會被緩存
exclude - 字符串或正則表達式,任何匹配的組件都不會被緩存

// 組件 aexport default { name: 'a', data () { return {} }}<keep-alive include="a"> <component> <!-- name 為 a 的組件將被緩存! --> </component></keep-alive>可以保留它的狀態或避免重新渲染<keep-alive exclude="a"> <component> <!-- 除了 name 為 a 的組件都將被緩存! --> </component></keep-alive>可以保留它的狀態或避免重新渲染<keep-alive include="test-keep-alive"> <!-- 將緩存name為test-keep-alive的組件 --> <component></component></keep-alive><keep-alive include="a,b"> <!-- 將緩存name為a或者b的組件,結合動態組件使用 --> <component :is="view"></component></keep-alive><!-- 使用正則表達式,需使用v-bind --><keep-alive :include="/a|b/"> <component :is="view"></component></keep-alive><!-- 動態判斷 --><keep-alive :include="includedComponents"> <router-view></router-view></keep-alive><keep-alive exclude="test-keep-alive"> <!-- 將不緩存name為test-keep-alive的組件 --> <component></component></keep-alive>

遇見 vue-router

router-view 也是一個組件,如果直接被包在 keep-alive 里面,所有路徑匹配到的視圖組件都會被緩存:

<keep-alive> <router-view> <!-- 所有路徑匹配到的視圖組件都會被緩存! --> </router-view></keep-alive>

然而產品汪總是要改需求,攔都攔不住...

問題

如果只想 router-view 里面某個組件被緩存,怎么辦?

使用 include/exclude
增加 router.meta 屬性
使用 include/exclude

// 組件 aexport default { name: 'a', data () { return {} }}<keep-alive include="a"> <router-view> <!-- 只有路徑匹配到的視圖 a 組件會被緩存! --> </router-view></keep-alive>

exclude 例子類似。

缺點:需要知道組件的 name,項目復雜的時候不是很好的選擇

增加 router.meta 屬性

// routes 配置export default [ { path: '/', name: 'home', component: Home, meta: { keepAlive: true // 需要被緩存 } }, { path: '/:id', name: 'edit', component: Edit, meta: { keepAlive: false // 不需要被緩存 } }]<keep-alive> <router-view v-if="$route.meta.keepAlive"> <!-- 這里是會被緩存的視圖組件,比如 Home! --> </router-view></keep-alive><router-view v-if="!$route.meta.keepAlive"> <!-- 這里是不被緩存的視圖組件,比如 Edit! --></router-view>

優點:不需要例舉出需要被緩存組件名稱

【加鹽】使用 router.meta 拓展

假設這里有 3 個路由: A、B、C。

需求:

默認顯示 A
B 跳到 A,A 不刷新
C 跳到 A,A 刷新
實現方式

在 A 路由里面設置 meta 屬性:

{ path: '/', name: 'A', component: A, meta: { keepAlive: true // 需要被緩存 }}

在 B 組件里面設置 beforeRouteLeave:

export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) {  // 設置下一個路由的 meta to.meta.keepAlive = true; // 讓 A 緩存,即不刷新 next(); }};

在 C 組件里面設置 beforeRouteLeave:

export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 設置下一個路由的 meta to.meta.keepAlive = false; // 讓 A 不緩存,即刷新 next(); }};

這樣便能實現 B 回到 A,A 不刷新;而 C 回到 A 則刷新。

總結

路由大法不錯,不需要關心哪個頁面跳轉過來的,只要 router.go(-1) 就能回去,不需要額外參數。

然而在非單頁應用的時候,keep-alive 并不能有效的緩存了= =

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淳化县| 徐水县| 玉林市| 西吉县| 桂东县| 长丰县| 延边| 西安市| 拜泉县| 青海省| 仁化县| 咸宁市| 曲靖市| 屏东县| 台东县| 师宗县| 儋州市| 兴业县| 凌云县| 盖州市| 衡山县| 宜丰县| 巨鹿县| 凤冈县| 中牟县| 清徐县| 额敏县| 南宁市| 璧山县| 手游| 瓦房店市| 固原市| 玛曲县| 叙永县| 天门市| 山西省| 嘉禾县| 屏边| 武穴市| 弥渡县| 太谷县|