vue 緩存的keepalive頁面刷新數據


用到這個的業務場景是這樣的:

a頁面點擊新建列表按鈕進入到新建的頁面b,填寫b頁面並點擊b頁面確認添加按鈕,把這些數據帶到a頁面,填充到列表(數組),可以添加多條,

點擊這條的時候進入到編輯頁面,確認修改之后,回退到a頁面,a頁面需要更新這條數據

實現這個功能的時候,由於是路由頁面之間的跳轉,首先想到的方案有幾個:1. 用sessionStorage本地存儲;2. 用路由參數帶過去;3. 用兄弟組件傳值

由於是添加完之后如果按回退是需要退出整個頁面,如果用路由跳轉,會出現回退到編輯頁面了,所以這個方法首先排除

用本地存儲的時候,如果不加回退也會吧之前存的歷史記錄給帶過來,所以最終選用了第三種方法

由於a頁面需要緩存,所以用到了路由頁面的緩存

router.js

{path: '/a',name: 'a',component: a,meta: {keepAlive: true}},

App.vue

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

由於用到了keepalive, 所以頁面在再次加載的時候是不會觸發created而是會觸發activated的

所以接收數據,重置數據要寫到activated方法下

a頁面接收 

更改用Vue.set()方法

調用方法:Vue.set( target, key, value )

target:要更改的數據源(可以是對象或者數組)

key:要更改的具體數據

value :重新賦的值

activated(){
        let that = this
        Self.$on('detailShow',(data)=>{ // 接收
            if(!data.isEdit){ // 是新增還是編輯--這個是在跳轉的時候帶過去的--新增/編輯頁面也會根據這個顯示內容有所區別
               that.addParams.push(data)
               that.addParams = Array.from(new Set(that.addParams.SubsidyInfos)) // 為避免重復去個重
            }else{
         // that.addParams[that.editIndex] = data // 剛開始想通過直接修改,后來發現不行,因為頁面是有緩存的,顯示的還是未修改之前的 Vue.set(that.addParams,that.editIndex,data) // 用set方法修改數據 } })
},

b頁面提交(新增/編輯)

submit(){
        if(!this.detailValidate()){ // 這個是表單校驗,如果不通過不然提交
          return;
        }else{
          Self.$emit('detailShow',this.addParams) // 事件分發
          this.$router.back();

        }
      }

vue 緩存的keepalive頁面刷新數據的話,這個主要還是用到了Vue.set( target, key, value )方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM