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

解決vue單頁面 回退頁面 keeplive 緩存問題

 更新時(shí)間:2020年07月22日 10:56:13   作者:去他喵嗚  
這篇文章主要介紹了解決vue單頁面 回退頁面 keeplive 緩存問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

場景:項(xiàng)目中遇到 vue 點(diǎn)擊回退 從A頁跳到B頁,緩存A頁,當(dāng)B頁狀態(tài)修改再次返回A時(shí),A頁查詢條件緩存不刷新,列表刷新

A頁:

B頁:

解決方法:

利用keep-alive 緩存需要緩存的頁面

1.在app.vue中改寫router-view

<template>
 <div id="app">
   <keep-alive>
    <router-view v-if="$route.meta.keepAlive">
      <!-- 這里是會(huì)被緩存的視圖組件,比如 page1,page2 -->
    </router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive">
    <!-- 這里是不被緩存的視圖組件,比如 page3 -->
  </router-view>
 </div>
</template>

2.在router/index.js中添加路由元信息,設(shè)置需要緩存的頁面

keepAlive:設(shè)置需要緩存的頁面

isBack:通過beforeRouteEnter這個(gè)鉤子函數(shù)中的from參數(shù)判斷是從哪個(gè)頁面過來的,這個(gè)參數(shù)執(zhí)行時(shí),組件實(shí)例還沒創(chuàng)建,不能在data中定義變量。所以我們可以在路由中定義一個(gè)變量isBack,用來判斷。

{
  path: '/trade',
  name: 'trade',
  component: () => import( /* webpackChunkName: "about" */ '@/views/trade.vue'),
  meta: {
   title:'trade.tradeTitle',
   keepAlive: true, // 此組件需要被緩存
   isBack:false, //用于判斷上一個(gè)頁面是哪個(gè)
  }
 },
 {
  path: '/detail/:id',
  name: 'detail',
  component: () => import( /* webpackChunkName: "about" */ '@/views/detail.vue'),
  meta: {
   title:'trade.detailTitle',
   keepAlive: false,
   isBack:false,//用于判斷上一個(gè)頁面是哪個(gè)
  }
 },

鉤子函數(shù)的執(zhí)行順序:

不使用keep-alive

beforeRouteEnter --> created --> mounted --> destroyed

使用keep-alive

beforeRouteEnter --> created --> mounted --> activated --> deactivated

再次進(jìn)入緩存的頁面,只會(huì)觸發(fā)beforeRouteEnter -->activated --> deactivated 。created和mounted不會(huì)再執(zhí)行。我們可以利用不同的鉤子函數(shù),做不同的事。務(wù)必理解上述鉤子函數(shù)的執(zhí)行時(shí)機(jī)和執(zhí)行順序,本教程的核心就依賴于此鉤子函數(shù)

activated和deactivated是使用keep-alive后,vue中比較重要的兩個(gè)鉤子函數(shù),建議詳細(xì)了解下。

在A頁面中通過beforeRouteEnter這個(gè)鉤子函數(shù)中判斷是從哪個(gè)頁面過來的

 beforeRouteLeave(to, from, next) {
 // 路由導(dǎo)航鉤子,此時(shí)還不能獲取組件實(shí)例 `this`,所以無法在data中定義變量(利用vm除外)
   // 參考 https://router.vuejs.org/zh-cn/advanced/navigation-guards.html
   // 所以,利用路由元信息中的meta字段設(shè)置變量,方便在各個(gè)位置獲取。這就是為什么在meta中定義isBack
   // 參考 https://router.vuejs.org/zh-cn/advanced/meta.html
  if (from.path === '/detail'){
   //判斷是從哪個(gè)路由過來的,
    //如果是B頁面即detail頁面過來的,表明當(dāng)前頁面不需要刷新獲取新數(shù)據(jù),直接用之前緩存的數(shù)據(jù)即可
   to.meta.isBack = true;
  }else{
   to.meta.isBack = false;
  }
  next();
 },

data中定義變量isFirstEnter用來判斷是否第一次進(jìn)入,或是否刷新了頁面,默認(rèn)false

 data() {
  return {
   isFirstEnter:false,
  };
 },

created中把isFirstEnter變?yōu)閠rue,說明是第一次進(jìn)入或刷新了頁面

 created() {
   this.isFirstEnter=true;
   // 只有第一次進(jìn)入或者刷新頁面后才會(huì)執(zhí)行此鉤子函數(shù)
   // 使用keep-alive后(2+次)進(jìn)入不會(huì)再執(zhí)行此鉤子函數(shù)
   this.$nextTick(() => {
   this.getLists();
  });
 },

activated中增加判斷條件

activated() {
  if(this.$route.meta.isBack || !this.isFirstEnter){
   // 如果isBack是false,表明需要獲取新數(shù)據(jù),否則就不再請(qǐng)求,直接使用緩存的數(shù)據(jù)
   // 如果isFirstEnter是true,表明是第一次進(jìn)入此頁面或用戶刷新了頁面,需獲取新數(shù)據(jù)
   this.tradeList=[]
   this.AjaxList = []   //把數(shù)據(jù)清空,可以稍微避免讓用戶看到之前緩存的數(shù)據(jù)
   this.pageNum = 1;
   this.$nextTick(() => {
    this.getLists();
   });
  }else{
   this.$route.meta.isBack=false
   this.isFirstEnter=false;
  }
},

以上這篇解決vue單頁面 回退頁面 keeplive 緩存問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解vue-router的Import異步加載模塊問題的解決方案

    詳解vue-router的Import異步加載模塊問題的解決方案

    這篇文章主要介紹了詳解vue-router的Import異步加載模塊問題的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 詳解Vue微信授權(quán)登錄前后端分離較為優(yōu)雅的解決方案

    詳解Vue微信授權(quán)登錄前后端分離較為優(yōu)雅的解決方案

    這篇文章主要介紹了詳解Vue微信授權(quán)登錄前后端分離較為優(yōu)雅的解決方案,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • Vue路由vue-router詳細(xì)講解指南

    Vue路由vue-router詳細(xì)講解指南

    這篇文章主要介紹了Vue路由vue-router詳細(xì)講解指南,對(duì)vue-router感興趣的同學(xué),可以參考下
    2021-04-04
  • vue-nuxt?登錄鑒權(quán)的實(shí)現(xiàn)

    vue-nuxt?登錄鑒權(quán)的實(shí)現(xiàn)

    本文主要介紹了vue-nuxt?登錄鑒權(quán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 解決vue與node模版引擎的渲染標(biāo)記{{}}(雙花括號(hào))沖突問題

    解決vue與node模版引擎的渲染標(biāo)記{{}}(雙花括號(hào))沖突問題

    這篇文章主要介紹了解決vue與node模版引擎的渲染標(biāo)記{{}}(雙花括號(hào))沖突問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • element-ui中使用upload組件獲取上傳文件信息

    element-ui中使用upload組件獲取上傳文件信息

    這篇文章主要介紹了element-ui中使用upload組件獲取上傳文件信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解如何使用webpack打包Vue工程

    詳解如何使用webpack打包Vue工程

    本篇文章主要介紹了詳解如何使用webpack打包Vue工程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能及思路

    element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能及思路

    這篇文章主要介紹了element?實(shí)現(xiàn)導(dǎo)航欄收起展開功能,實(shí)現(xiàn)思路先給 el-menu加上 :collapse="isCollapse" 屬性,這個(gè)屬性也是 element 上的一個(gè)參數(shù),意思為是否開啟折疊動(dòng)畫,在 data 中定義 isCollapse ,用 true 和 false 控制展開與收起,需要的朋友可以參考下
    2023-01-01
  • vue+elementUI組件tree如何實(shí)現(xiàn)單選加條件禁用

    vue+elementUI組件tree如何實(shí)現(xiàn)單選加條件禁用

    這篇文章主要介紹了vue+elementUI組件tree如何實(shí)現(xiàn)單選加條件禁用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 如何修改element-ui中tree組件的icon圖標(biāo)(小白都會(huì)的前端技能)

    如何修改element-ui中tree組件的icon圖標(biāo)(小白都會(huì)的前端技能)

    這篇文章主要給大家介紹了關(guān)于如何修改element-ui中tree組件的icon圖標(biāo)的相關(guān)資料,本文介紹的是小白都會(huì)的前端技能,文中通過代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01

最新評(píng)論

贵阳市| 阿拉尔市| 镇赉县| 法库县| 鄄城县| 庆阳市| 鄂温| 永胜县| 和静县| 喀喇| 中江县| 甘孜县| 龙口市| 肇州县| 天台县| 高碑店市| 乡宁县| 南投县| 灵台县| 深州市| 禄劝| 武冈市| 江阴市| 城固县| 麟游县| 定襄县| 梧州市| 平陆县| 社旗县| 金阳县| 清苑县| 嘉定区| 汉川市| 辽宁省| 刚察县| 博罗县| 本溪| 余干县| 临清市| 石渠县| 鄢陵县|