vm.$set(vm.list,index,newValue)
或vm.list.splice(i,1)
進行更新App.vue
<keep-alive>
<router-view v-if="$route.meta.keepAlive">
</router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive" />
router/index.js
{
path: ...,
name: ...,
meta: {
title: '列表',
keepAlive: true,
canKeep:false
},
component: ...
},
複製代碼
beforeRouteEnter(to, from, next) {
if (from.name == "detail") {
to.meta.canKeep = true;
} else {
to.meta.canKeep = false;
}
next();
},
複製代碼
activated() {
if (!this.$route.meta.canKeep) {
// 在這裏發送請求,刷新數據
}
},
複製代碼
activated() {
// 刷新數據
if (!this.$route.meta.canKeep) {
...
window.scrollTo(0, 1);
} else {
// 不刷新數據 但詳情頁數據有更改時
this.showPackageList.forEach((item,idx) => {
if(..){
item.looked = true;
// 更新某一條數據
this.$set(this.showPackageList, idx, item);
}
})
}
this.rollingLoad();
},
複製代碼
從詳情1返回列表時正常,進入其它頁面,返回,列表數據更新,進入詳情2,返回列表,此時列表會自動定位到從列表進入詳情1時的位置,而不是進入詳情2前的位置。vue
列表只作了數據刷新,位置信息依舊保留,當列表刷新後,若是頁面觸發過滾動,位置信息獲得更新,再次返回則正常,無觸發滾動則再次返回會回到第一次定位的位置bash
在列表數據更新後,手動觸發滾動函數
activated() {
if (!this.$route.meta.canKeep) {
// 刷新數據
// 重置頁面位置
window.scrollTo(0,1)
}
},
複製代碼