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

Vue keepAlive 數(shù)據(jù)緩存工具實(shí)現(xiàn)返回上一個(gè)頁面瀏覽的位置

 更新時(shí)間:2019年05月10日 11:54:56   作者:采蘑菇的小姑娘  
這篇文章主要介紹了Vue keepAlive 數(shù)據(jù)緩存工具,實(shí)現(xiàn)返回上一個(gè)頁面瀏覽的位置,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

需求分析

背景:

1.數(shù)據(jù)列表頁,滾動(dòng)加載數(shù)據(jù);

2.多條數(shù)據(jù)情況下,點(diǎn)擊某一條,進(jìn)入詳細(xì)頁進(jìn)行編輯(修改,刪除)操作;

3.保存返回上一頁;

在上面的情況下,想要保持在上次瀏覽位置,并且保持?jǐn)?shù)據(jù)是最新的;

解決辦法

1.原始的辦法:在點(diǎn)擊詳情頁的時(shí)候,記住瀏覽位置,傳遞參數(shù)或者存到本地緩存,然后在詳情頁操作完畢后,返回的時(shí)候,路由守衛(wèi)可以判斷,是否詳情頁跳轉(zhuǎn)回來的,然后讓頁面滾動(dòng)到上次記錄的位置;

思路是這樣,實(shí)際操作很麻煩;

2.推薦辦法:使用vue動(dòng)態(tài)組件keep-alive,搭配路由守衛(wèi)函數(shù)beforeRouteLeave,以及activated鉤子函數(shù);

對(duì)于鉤子函數(shù)執(zhí)行順序,以及作用詳細(xì)說明,請(qǐng)參考vue組件的生命周期

步驟詳解

我的步驟是按照開發(fā)思路進(jìn)行的,場(chǎng)景就是從商品列表頁——>商品詳細(xì)頁——>商品列表(數(shù)據(jù)緩存);

開發(fā)之前看到網(wǎng)上好多人都是在路由文件里面配置

meta:{keepAlive:true}

但我覺得沒有必要,因?yàn)榱斜眄摬皇且恢毙枰彺鏀?shù)據(jù)的,假如從首頁進(jìn)入,則不需要,所以就在路由守衛(wèi)函數(shù)中判斷是否需要緩存數(shù)據(jù)即可;

以下代碼,使用list.vue代表列表頁;detail.vue代表詳細(xì)頁;

場(chǎng)景1:點(diǎn)擊返回,判斷路由跳轉(zhuǎn)的是否是需要緩存的列表頁:

detail.vue

beforeRouteLeave (to, from, next) {
 if (to.name === 'M2mBoard') {
 to.meta.keepAlive = true
 }
 next()
 }

由于keepAlive是vue2.0中內(nèi)置組件,所以設(shè)置頁面路由meta.keepAlive = true即可緩存數(shù)據(jù),路由跳轉(zhuǎn)是利用函數(shù)this.$router.go(-1);就可以顯示在上次瀏覽的記錄位置;

場(chǎng)景2:編輯詳細(xì)頁數(shù)據(jù),回到列表頁,則需要將修改的數(shù)據(jù)保存到本地,然后在列表頁的緩存數(shù)據(jù)中,更改顯示即可:

detail.vue

beforeRouteLeave (to, from, next) {
 if (to.name === 'M2mBoard') {
 to.meta.keepAlive = true
 }
 if (this.isChange) {
 let changeData = {
 inquiryNo: this.inquiry.inquiryNo,
 inquiryTitle: this.inquiry.inquiryTitle
 }
 window.sessionStorage.setItem('changeData', JSON.stringify(changeData))
 }
 to.meta.isChange = this.isChange
 next()
 }

列表頁中判斷一下,是否需要修改數(shù)據(jù):

list.vue

activated () {
 if (this.$route.meta.isChange) {
 let changeData = JSON.parse(window.sessionStorage.getItem('changeData'))
 this.list.forEach(item => {
 if (item.inquiryNo === changeData.inquiryNo) {
  item.inquiryTitle = changeData.inquiryTitle
 }
 })
 }
 }

activated 鉤子函數(shù),在keep-alive組件激活時(shí)自動(dòng)執(zhí)行,判斷如果需要修改,從本地取出數(shù)據(jù),循環(huán)列表數(shù)據(jù),找出需要修改的那一條,進(jìn)行顯示數(shù)據(jù)的修改(因?yàn)槭桥R時(shí)修改,所以只修改顯示的參數(shù)即可);

場(chǎng)景3:在詳細(xì)頁點(diǎn)擊刪除該條數(shù)據(jù)

detail.vue

beforeRouteLeave (to, from, next) {
 if (to.name === 'M2mBoard' && !this.idDel) {
 to.meta.keepAlive = true
 }
 next()
 }

刪除操作,可以排除后直接不用緩存,或者跟修改一樣的操作,判斷是刪除,臨時(shí)刪除,列表中緩存的數(shù)據(jù)也可以;

上面3種情況通常會(huì)同時(shí)出現(xiàn),所以最后的寫法就是:

detail.vue

beforeRouteLeave (to, from, next) {
 if (to.name === 'M2mBoard' && !this.idDel) {
 to.meta.keepAlive = true
 }
 if (this.isChange) {
 let changeData = {
 inquiryNo: this.inquiry.inquiryNo,
 inquiryTitle: this.inquiry.inquiryTitle
 }
 window.sessionStorage.setItem('changeData', JSON.stringify(changeData))
 }
 to.meta.isChange = this.isChange
 next()
 }

list.vue

beforeRouteLeave (to, from, next) {
 from.meta.keepAlive = false
 next()
 },
 activated () {
 if (this.$route.meta.isChange) {
 let changeData = JSON.parse(window.sessionStorage.getItem('changeData'))
 this.list.forEach(item => {
 if (item.inquiryNo === changeData.inquiryNo) {
  item.inquiryTitle = changeData.inquiryTitle
 }
 })
 }
 }

列表頁種路由跳轉(zhuǎn)的時(shí)候需要進(jìn)行meta.keepAlive = false操作,防止出現(xiàn),從detail.vue跳轉(zhuǎn)回來后,list.vue在與其他頁面進(jìn)行路由跳轉(zhuǎn)的時(shí)候,始終處于緩存狀態(tài),數(shù)據(jù)不更新現(xiàn)象;

注意:在info.vue跳轉(zhuǎn)list.vue的路由活動(dòng)最好使用this.$router.go(-1),不然回到list.vue頁面,數(shù)據(jù)緩存了,但是頁面位置不會(huì)是上次訪問的位置;具體原因還在研究,哈哈哈...

ok,上面就是在項(xiàng)目開發(fā)使用中用到的keep-alive的整個(gè)思路;記錄一下,以免忘記,還有歡迎參考與指正。

以上所述是小編給大家介紹的Vue keepAlive 數(shù)據(jù)緩存工具實(shí)現(xiàn)返回上一個(gè)頁面瀏覽的位置,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • 詳解Vue中添加過渡效果

    詳解Vue中添加過渡效果

    本篇文章主要介紹了詳解Vue中添加過渡效果 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • vue實(shí)現(xiàn)動(dòng)態(tài)路由的詳細(xì)代碼示例

    vue實(shí)現(xiàn)動(dòng)態(tài)路由的詳細(xì)代碼示例

    動(dòng)態(tài)路由,動(dòng)態(tài)即不是寫死的,是可變的,下面這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)動(dòng)態(tài)路由的詳細(xì)代碼示例,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 詳解Vite的新體驗(yàn)

    詳解Vite的新體驗(yàn)

    這篇文章主要介紹了詳解Vite的新體驗(yàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Vue中的常用指令及用法總結(jié)

    Vue中的常用指令及用法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Vue中的常用指令及用法總結(jié)內(nèi)容,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2022-01-01
  • 基于Vue結(jié)合ElementUI的換膚解決方案

    基于Vue結(jié)合ElementUI的換膚解決方案

    本文將介紹幾種基于Vue、Element-UI的換膚實(shí)現(xiàn)方案,力爭(zhēng)通俗易懂,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 一個(gè)基于vue3+ts+vite項(xiàng)目搭建初探

    一個(gè)基于vue3+ts+vite項(xiàng)目搭建初探

    當(dāng)市面上主流的組件庫不能滿足我們業(yè)務(wù)需求的時(shí)候,那么我們就有必要開發(fā)一套屬于自己團(tuán)隊(duì)的組件庫,下面這篇文章主要給大家介紹了一個(gè)基于vue3+ts+vite項(xiàng)目搭建的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • vue使用el-upload實(shí)現(xiàn)文件上傳的實(shí)例代碼

    vue使用el-upload實(shí)現(xiàn)文件上傳的實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了vue使用el-upload實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴們可以參考一下
    2024-01-01
  • vue中深度選擇器圖文詳解

    vue中深度選擇器圖文詳解

    在Vue的開發(fā)中,我們經(jīng)常會(huì)用到外部組件庫,下面這篇文章主要給大家介紹了關(guān)于vue中深度選擇器的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • vue3中獲取dom元素和操作實(shí)現(xiàn)方法

    vue3中獲取dom元素和操作實(shí)現(xiàn)方法

    ref是Vue3中一個(gè)非常重要的功能,它可以用來獲取DOM節(jié)點(diǎn),從而實(shí)現(xiàn)對(duì)DOM節(jié)點(diǎn)的操作,下面這篇文章主要給大家介紹了關(guān)于vue3中獲取dom元素和操作實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 詳解Unity webgl 嵌入Vue實(shí)現(xiàn)過程

    詳解Unity webgl 嵌入Vue實(shí)現(xiàn)過程

    Unity webgl嵌入到前端網(wǎng)頁中,前端通過調(diào)用Unity webgl內(nèi)方法實(shí)現(xiàn)需要展示的功能,前端點(diǎn)擊Unity webgl內(nèi)的交互點(diǎn),Unity webgl返回給前端一些需要的數(shù)據(jù),這篇文章主要介紹了Unity webgl 嵌入Vue實(shí)現(xiàn)過程,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

仁化县| 新河县| 潞城市| 酉阳| 水城县| 扎赉特旗| 齐河县| 龙里县| 姚安县| 高阳县| 观塘区| 辉县市| 正镶白旗| 阿克陶县| 达日县| 普兰县| 东台市| 万安县| 博湖县| 天祝| 黔江区| 商都县| 类乌齐县| 花莲县| 博爱县| 同仁县| 金门县| 涪陵区| 南投市| 肥东县| 布尔津县| 明水县| 蒙阴县| 敖汉旗| 泰兴市| 江津市| 沙洋县| 玛纳斯县| 扎赉特旗| 横峰县| 土默特左旗|