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

首頁 > 編程 > JavaScript > 正文

Vue keep-alive實踐總結(推薦)

2019-11-19 15:35:43
字體:
來源:轉載
供稿:網友

<keep-alive>是Vue的內置組件,能在組件切換過程中將狀態保留在內存中,防止重復渲染DOM。

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

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的組件,結合動態組件使用 --> <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>

結合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中設置router的元信息meta:

//...router.jsexport 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"> <h1>Vue</h1> <h2>{{msg}}</h2> <input placeholder="輸入框"></input> </div></template><!-- Hello頁面 --><template> <div class="hello"> <h1>{{msg}}</h1> </div></template>

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

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

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

​ 圖2 跳轉到Hello

​ 圖3 返回Page1頁面,輸入框數據會被保留

當然,也可以通過動態設置route.meta的keepAlive屬性來實現其他需求,

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

  • 首頁是A頁面
  • B頁面跳轉到A,A頁面需要緩存
  • C頁面跳轉到A,A頁面不需要被緩存

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

A的路由:

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

親測有效哦~

keep-alive生命周期鉤子函數:activated、deactivated

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周宁县| 天津市| 六盘水市| 丘北县| 鄂托克旗| 陈巴尔虎旗| 尼玛县| 万宁市| 富裕县| 崇明县| 旺苍县| 涪陵区| 彭山县| 安阳市| 清水河县| 鞍山市| 永济市| 离岛区| 绵竹市| 新建县| 百色市| 伊通| 祁连县| 周宁县| 日照市| 台前县| 龙门县| 禹州市| 安西县| 镇巴县| 中宁县| 白玉县| 蒙阴县| 平定县| 杭锦旗| 从江县| 临泽县| 天津市| 吐鲁番市| 邢台县| 明水县|