vue 快取的keepalive頁面重新整理資料
阿新 • • 發佈:2018-11-21
用到這個的業務場景是這樣的:
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 )方法