溫馨提示×

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

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

vue使用內(nèi)置組件keep-alive事件動(dòng)態(tài)緩存的方法

發(fā)布時(shí)間:2020-11-02 16:00:44 來(lái)源:億速云 閱讀:213 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

vue使用內(nèi)置組件keep-alive事件動(dòng)態(tài)緩存的方法?相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

在App.vue文件中配置

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

在路由中配置

  {
    path: '/backstage',
    component: resolve => require(['@/views/backstage/my'], resolve),
    meta: { keepAlive: false }
  },
  {
    path: '/backstage/info',
    component: resolve => require(['@/views/backstage/my/info'], resolve),
    meta: { keepAlive: false }
  },

在頁(yè)面中利用 beforeRouteLeave 動(dòng)態(tài)處理

export default {
  data() {
    return {};
  },
  methods: {},
  beforeRouteLeave(to, from, next) {
    // 設(shè)置下一個(gè)路由的 meta
    to.meta.keepAlive = false; // 不緩存
    // to.meta.keepAlive = true; // 緩存
    next();
  }
};

補(bǔ)充知識(shí):vue使用keep-alive后watch事件不銷(xiāo)毀解決方案

使用了keep-alive動(dòng)態(tài)緩存頁(yè)面之后,有一些很難解決的問(wèn)題:

每個(gè)頁(yè)面里面設(shè)置的watch監(jiān)聽(tīng)事件,如果監(jiān)聽(tīng)了路由的變化或者vuex的變化,在切換頁(yè)面的時(shí)候watch不會(huì)被銷(xiāo)毀,導(dǎo)致下一個(gè)頁(yè)面重復(fù)觸發(fā)上一個(gè)watch監(jiān)聽(tīng)的對(duì)象,重復(fù)請(qǐng)求接口。

解決方案:

定義一個(gè)全局 mixin.js

export const mixin = {
 data () {
  return {
   activatedFlag: false
  };
 },
 mounted () {
  this.activatedFlag = true;
 },
 activated () {
  this.activatedFlag = true;
 },
 deactivated () {
  this.activatedFlag = false;
 }
};

在使用keep-alive緩存的頁(yè)面引入mixin

vue使用內(nèi)置組件keep-alive事件動(dòng)態(tài)緩存的方法

防止在非當(dāng)前頁(yè)面重復(fù)觸發(fā)keep-alive緩存頁(yè)面的方法

vue使用內(nèi)置組件keep-alive事件動(dòng)態(tài)緩存的方法

看完上述內(nèi)容,你們掌握vue使用內(nèi)置組件keep-alive事件動(dòng)態(tài)緩存的方法的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

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

AI