溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Vue中keep-alive的示例分析

發(fā)布時間:2021-08-13 10:23:15 來源:億速云 閱讀:166 作者:小新 欄目:web開發(fā)

這篇文章主要為大家展示了“Vue中keep-alive的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Vue中keep-alive的示例分析”這篇文章吧。

<keep-alive>是Vue的內(nèi)置組件,能在組件切換過程中將狀態(tài)保留在內(nèi)存中,防止重復(fù)渲染DOM。

<keep-alive> 包裹動態(tài)組件時,會緩存不活動的組件實例,而不是銷毀它們。和 <transition> 相似,<keep-alive> 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現(xiàn)在父組件鏈中。

prop:

  • include: 字符串或正則表達式。只有匹配的組件會被緩存。

  • exclude: 字符串或正則表達式。任何匹配的組件都不會被緩存。

在2.1.0版本Vue中

常見用法:

// 組件
export default {
 name: 'test-keep-alive',
 data () {
 return {
  includedComponents: "test-keep-alive"
 }
 }
}
<keep-alive include="test-keep-alive">
 <!-- 將緩存name為test-keep-alive的組件 -->
 <component></component>
</keep-alive>

<keep-alive include="a,b">
 <!-- 將緩存name為a或者b的組件,結(jié)合動態(tài)組件使用 -->
 <component :is="view"></component>
</keep-alive>

<!-- 使用正則表達式,需使用v-bind -->
<keep-alive :include="/a|b/">
 <component :is="view"></component>
</keep-alive>

<!-- 動態(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>

結(jié)合router,緩存部分頁面

使用$route.meta的keepAlive屬性:

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

需要在router中設(shè)置router的元信息meta:

//...router.js
export default new Router({
 routes: [
 {
  path: '/',
  name: 'Hello',
  component: Hello,
  meta: {
  keepAlive: false // 不需要緩存
  }
 },
 {
  path: '/page1',
  name: 'Page1',
  component: Page1,
  meta: {
  keepAlive: true // 需要被緩存
  }
 }
 ]
})

使用效果

以上面router的代碼為例:

<!-- Page1頁面 -->
<template>
 <div class="hello">
 <h2>Vue</h2>
 <h3>{{msg}}</h3>
 <input placeholder="輸入框"></input>
 </div>
</template>

<!-- Hello頁面 -->
<template>
 <div class="hello">
 <h2>{{msg}}</h2>
 </div>
</template>

(1) 在Page1頁面輸入框輸入“asd”,然后手動跳轉(zhuǎn)到Hello頁面;

(2) 回到Page1頁面發(fā)現(xiàn)之前輸入的"asd"依然保留,說明頁面信息成功保存在內(nèi)存中;

Vue中keep-alive的示例分析

圖1 進入Page1頁面,并輸入"asd"

Vue中keep-alive的示例分析

圖2 跳轉(zhuǎn)到Hello

Vue中keep-alive的示例分析

圖3 返回Page1頁面,輸入框數(shù)據(jù)會被保留

當(dāng)然,也可以通過動態(tài)設(shè)置route.meta的keepAlive屬性來實現(xiàn)其他需求,

借鑒一下vue-router 之 keep-alive這篇博客中的例子:

  • 首頁是A頁面

  • B頁面跳轉(zhuǎn)到A,A頁面需要緩存

  • C頁面跳轉(zhuǎn)到A,A頁面不需要被緩存

思路是在每個路由的beforeRouteLeave(to, from, next)鉤子中設(shè)置to.meta.keepAlive

A的路由:

{
 path: '/',
 name: 'A',
 component: A,
 meta: {
  keepAlive: true // 需要被緩存
 }
}
export default {
 data() {
  return {};
 },
 methods: {},
 beforeRouteLeave(to, from, next) {
   // 設(shè)置下一個路由的 meta
  to.meta.keepAlive = true; // B 跳轉(zhuǎn)到 A 時,讓 A 緩存,即不刷新
  next();
 }
};
export default {
 data() {
  return {};
 },
 methods: {},
 beforeRouteLeave(to, from, next) {
  // 設(shè)置下一個路由的 meta
  to.meta.keepAlive = false; // C 跳轉(zhuǎn)到 A 時讓 A 不緩存,即刷新
  next();
 }
};

親測有效哦~

keep-alive生命周期鉤子函數(shù):activated、deactivated

使用<keep-alive>會將數(shù)據(jù)保留在內(nèi)存中,如果要在每次進入頁面的時候獲取最新的數(shù)據(jù),需要在activated階段獲取數(shù)據(jù),承擔(dān)原來created鉤子中獲取數(shù)據(jù)的任務(wù)。

以上是“Vue中keep-alive的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI