中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

keep-alive+vuex如何讓緩存的頁面靈活起來-創(chuàng)新互聯(lián)

這篇文章主要介紹keep-alive+vuex如何讓緩存的頁面靈活起來,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、安岳網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)商城網(wǎng)站制作、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為安岳等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

引入

在使用vue + vue-router開發(fā)SPA的時候,有沒有遇到過這樣的情況:當(dāng)我們在列表頁和詳情頁之間切換的時候,如果列表頁不做緩存,會導(dǎo)致每次從詳情頁返回時,列表頁都會重新加載。如下圖:

keep-alive+vuex如何讓緩存的頁面靈活起來

細(xì)心的朋友已經(jīng)發(fā)現(xiàn)了,當(dāng)從詳情頁返回列表頁的時候,列表頁重載了,這樣的體驗顯然不好,這時我們可以對列表頁進(jìn)行緩存處理。

keep-alive實現(xiàn)頁面緩存

我們的項目不一定所有頁面都需要做緩存處理,所以這里介紹兩種按需緩存的方法:

方法一:

首先在定義路由的時候配置 meta 字段,自定義一個KeepAlive字段作為該頁面是否緩存的標(biāo)記:

routes:[{
 path: '/search',
 name: 'search',
 component: search,
 meta: {
  title: '搜索列表頁',
  keepAlive: true // 標(biāo)記列表頁需要被緩存
 }
},
{
 path: '/detail',
 name: 'detail',
 component: detail,
 meta: {
  title: '詳情頁',
  // 詳情頁不需要做緩存,所以不加keepAlive標(biāo)記
 }
}]

由于<keep-alive>組件不支持v-if指令,所以我們在App.vue中采用兩個<router-view>的寫法,通過當(dāng)前路由的keepAlive字段來判斷是否對頁面進(jìn)行緩存:

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

方法二

使用<keep-alive>提供的 exclude 或者 include 選項,此處我們使用 exclude ,在App.vue中:

<div id="app">
 <keep-alive exclude="detail">
  <router-view />
 </keep-alive>
</div>

需要注意的是,一定要給頁面組件加上相應(yīng)的name,例如在detail.vue中:

<script>
export default {
 name: 'detail', // 這個name要和keep-alive中的exclude選項值一致
 ...
}
</script>

這么寫就代表了在項目中除了name為detail的頁面組件外,其余頁面都將進(jìn)行緩存。

特殊情況優(yōu)化:

如果詳情頁也做了keep-alive,那么列表頁和詳情頁切換時,滾動位置可能會相互影響,這時需要在 Router 實例中提供一個 scrollBehavior 方法:

export default new Router({
 scrollBehavior (to, from, savedPosition) {
 	if (savedPosition) {
 		return savedPosition
 	} else {
 		return { x: 0, y: 0 }
 	}
 },
 routes: [...],
})

效果展示

keep-alive+vuex如何讓緩存的頁面靈活起來

效果看似很不錯,實現(xiàn)了列表頁的緩存。但這其實并不靈活,比如返回首頁再進(jìn)入這個搜索頁的時候,由于沒做任何處理,所以這個搜索頁它仍處于之前的狀態(tài):

keep-alive+vuex如何讓緩存的頁面靈活起來

然而,我希望凡是從首頁進(jìn)入搜索頁,頁面數(shù)據(jù)都需要重置回初始狀態(tài),有沒有什么方可以靈活控制頁面數(shù)據(jù)是否需要重置呢?這時我的腦海里浮現(xiàn)了vue生態(tài)系統(tǒng)中的狀態(tài)管理庫vuex。

借助vuex使頁面更靈活

需求分析: 我們需要一個全局的flag來控制每次進(jìn)入緩存頁時,數(shù)據(jù)是否需要重置,正好vuex能做到。

vuex搞起來

安裝

npm install vuex --save

 配置vuex

為了方便日后維護,可以創(chuàng)建一個store目錄專門存放vuex的模塊代碼,目錄結(jié)構(gòu)參考下圖:

keep-alive+vuex如何讓緩存的頁面靈活起來

state.js:

const state = {
 refreshSearch: true // 標(biāo)記是否刷新搜索頁
}

export default state

mutation.js

const matutaions = {
 setRefreshSearch(state, flag) {
  state.refreshSearch = flag
 }
}
 
export default matutaions

index.js

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'

Vue.use(Vuex)

export default new Vuex.Store({
 state,
 mutations
})

在入口文件main.js中:

import store from './store' //這里是指向store目錄中的index.js
new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

這樣,我們就相當(dāng)于用vuex創(chuàng)建了一個用來判斷頁面是否需要重置的標(biāo)記了。

為所欲為地重置你的緩存頁中的數(shù)據(jù)

在哪里重置

keep-alive的組件有個特有的生命周期鉤子activated()。activated()會在keep-alive的組件每次激活時調(diào)用,而created()只有創(chuàng)建的時候會被調(diào)用一次,再次激活就不會被調(diào)用了。所以這里我們需要在activated()鉤子中重置我們的頁面數(shù)據(jù)。

 在activated()中想重置就重置

這里要借助vuex中的refreshSearch標(biāo)記來判斷是否需要重置

search.vue:(這個是需要緩存的頁面)

<script>
import {mapState, mapMutations} from 'vuex' //vuex提供的映射函數(shù),用來簡化代碼的
export default {
  activated() {
    if (this.refreshSearch) {
      // 若為true,則執(zhí)行重置頁面等相關(guān)操作
      this.fetchData();
    } else {
      this.reset(true);
    }
  },
  methods:{
    fetchData() {
      // 獲取頁面數(shù)據(jù)
    },
    ...mapMutations({
      reset: 'setRefreshSearch' // 將 `this.reset()` 映射為 `this.$store.commit('setRefreshSearch')`
    })
  },
  computed: {
    ...mapState([
      'refreshSearch' // 映射 this.refreshSearch 為 this.$store.state.refreshSearch
    ]),
  }
}
</script>

當(dāng)我們從搜索頁去詳情頁時,希望搜索頁緩存,只需要把標(biāo)記設(shè)為false:

methods: {
  goDetail() {
    this.reset(false) // 這樣返回搜索頁的時候,搜索頁就不會重置數(shù)據(jù)了
    this.$router.push({path: '/detail'})
  },
  ...mapMutations({
    reset: 'setRefreshSearch'
  })
}

當(dāng)我們從首頁去搜索頁時,希望搜索頁數(shù)據(jù)重置,只需把標(biāo)記設(shè)為true:

methods: {
  goSearch() {
    this.reset(true) // 這樣去搜索頁時數(shù)據(jù)就會被重置了
    this.$router.push({path: '/search'})
  },
  ...mapMutations({
    reset: 'setRefreshSearch'
  })
}

效果預(yù)覽

keep-alive+vuex如何讓緩存的頁面靈活起來

以上是“keep-alive+vuex如何讓緩存的頁面靈活起來”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文題目:keep-alive+vuex如何讓緩存的頁面靈活起來-創(chuàng)新互聯(lián)
路徑分享:http://www.2m8n56k.cn/article40/dodjho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計品牌網(wǎng)站制作網(wǎng)站策劃外貿(mào)網(wǎng)站建設(shè)小程序開發(fā)手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
主站蜘蛛池模板: 国产人成精品综合欧美成人 | 亚洲爽| 久久精品国产精品青草 | 手机在线毛片 | 久久视频免费在线观看 | 免费在线观看的毛片 | 一级做a爰性色毛片免费 | 免费视频网站一级人爱视频 | 毛片3| 国产成人福利夜色影视 | 亚洲日韩视频免费观看 | 国产精品免费大片一区二区 | 114毛片免费观看网站 | 欧美日中文字幕 | 欧美整片在线观看 | 2020亚洲男人天堂 | 久草视频在线资源站 | 51久久夜色精品国产 | 国产精品亚洲片在线观看不卡 | 亚洲美女在线观看播放 | 国产精品手机视频一区二区 | 亚洲成人在线视频网站 | 三级网站免费 | 在线观看二区三区午夜 | 福利视频午夜 | 亚洲欧洲小视频 | 日本综合欧美一区二区三区 | 日本三级香港三级乳网址 | 男人操女人逼逼视频 | 成人亚洲精品777777 | 无内丝袜透明在线播放 | 亚洲国产夜色在线观看 | 亚洲图片国产日韩欧美 | 日本高清毛片视频在线看 | 日韩美女一区 | 国产精品亚洲一区在线播放 | 日韩欧美一区二区精品久久 | 99久久精品免费看国产一区二区 | 欧美性69| 国产美女精品三级在线观看 | 美女一级ba大片免色野外 |