91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

vue中keep-alive,include的緩存問題

發布時間:2020-10-05 07:52:16 來源:腳本之家 閱讀:312 作者:Vicky-Rong 欄目:web開發

前提:有A,B,C,D四個頁面,A是按鈕頁(點擊按鈕進入B頁面),B是訂單列表頁,C是訂單詳情頁,D是費用詳情頁

需求:順序是A->B->C->D,每次都刷新頁面,D->C->B時走緩存,但是每次從A到B都要刷新B頁面,從B到C需要刷新C頁面,從C到D要刷新D頁面

在vue官方文檔2.1以上有include 和 exclude 屬性允許組件有條件地緩存。在這里主要用include結合vuex來實現(四個頁面組件都有自己的name才會生效,這里name就叫A,B,C,D)

從D->C,從C->B,從B->A 可以寫一個公共的頭部返回組件,統一使用 this.$router.go(-1)返回前一頁

App.vue

<template>
 <div class="app">
  <keep-alive :include="keepAlive" >
   <router-view/>
  </keep-alive>
 </div>
</template>

<script type='text/javascript'>
export default {
 data () {
  return {}
 },
 computed: {
  keepAlive () {
   return this.$store.getters.keepAlive
  }
 }
}
</script>

store.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
 state: {
  keepAlive: []
 },
 mutations: {
  SET_KEEP_ALIVE: (state, keepAlive) => {
   state.keepAlive = keepAlive
  }
 },
 getters: {
  keepAlive: state => state.keepAlive
 }
})

每次進入B頁面時先初始化 keepAlive(設置要走緩存的頁面)

A.vue

<script>
  export default {
    name: 'A',
    methods: {
      buttonClick () {
        this.$store.commit('SET_KEEP_ALIVE', ['B', 'C', 'D']) 
          this.$router.push('/B') 
       } 
     } 
  }
</script>

B.vue 該頁面用來設置緩存和清除緩存

<script>
  export default {
    name: 'B',
    beforeRouteEnter (to, from, next) {
      next(vm => {
        if (from.path.indexOf('C') > -1) {
          vm.$store.commit('SET_KEEP_ALIVE', ['B'])
        }
      })
    },
    beforeRouteLeave (to, from, next) {
      if (to.path.indexOf('C') > -1) {
        this.$store.commit('SET_KEEP_ALIVE', ['B', 'C'])
      } else if (to.path.indexOf('A') > -1) {
         this.$store.commit('SET_KEEP_ALIVE', []) 
      }
      next()
    }
 }
</script>  

到這里就實現了需求

PS:vue keep-alive include無效

檢查版本

確定當前的vue版本的是2.1+

因為include和exclude是vue2.1.0新增的兩個屬性.

package.json

"vue": "^2.5.2",

檢查name

注意,不是router.js中的name,而是單個vue組件中的name屬性.

建議將router.js中的name和vue組件的name保持一致,不要混亂.

export default {
  name: "index"
}

多層嵌套

網上的答案幾乎都是檢查vue組件的name屬性,但還是有一個巨坑.

那就是多級嵌套<router-view></router-view>,但凡有超過兩個以上的router-view且是父子級關系,請都加上keep-alive,只加一個不會生效.

// app.vue
<keep-alive include="app,index">
  <router-view></router-view>
</keep-alive>

// other.vue
<keep-alive include="app,index">
  <router-view></router-view>
</keep-alive>

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正定县| 石景山区| 康定县| 忻州市| 阿拉尔市| 辽宁省| 遂溪县| 重庆市| 秦皇岛市| 葫芦岛市| 罗甸县| 察隅县| 高陵县| 塔城市| 华池县| 丹巴县| 衡南县| 乐清市| 枣强县| 沐川县| 唐河县| 仙游县| 泌阳县| 桃园县| 福海县| 鄂托克旗| 柳林县| 淅川县| 阿勒泰市| 广河县| 故城县| 渝中区| 淮安市| 贡嘎县| 海安县| 当涂县| 高青县| 天台县| 平远县| 淮阳县| 抚顺县|