1. 程式人生 > 實用技巧 >Vue 實現前進重新整理,後退不重新整理的效果

Vue 實現前進重新整理,後退不重新整理的效果

需求一:

在一個列表頁中,第一次進入的時候,請求獲取資料。
點選某個列表項,跳到詳情頁,再從詳情頁後退回到列表頁時,不重新整理。
也就是說從其他頁面進到列表頁,需要重新整理獲取資料,從詳情頁返回到列表頁時不要重新整理。

解決方案
在App.vue設定:

<keep-alive include="list">
     <router-view/>
</keep-alive>

假設列表頁為list.vue,詳情頁為detail.vue,這兩個都是子元件。
我們在keep-alive新增列表頁的名字,快取列表頁。
然後在列表頁的created函式裡新增 ajax請求,這樣只有第一次進入到列表頁的時候才會請求資料,當從列表頁跳到詳情頁,再從詳情頁回來的時候,列表頁就不會重新整理。
這樣就可以解決問題了。

資源搜尋網站大全 https://www.renrenfan.com.cn 廣州VI設計公司https://www.houdianzi.com

需求二:

在需求一的基礎上,再加一個要求:可以在詳情頁中刪除對應的列表項,這時返回到列表頁時需要重新整理重新獲取資料。
我們可以在路由配置檔案上對detail.vue增加一個meta屬性。

{
	path: '/detail',
	name: 'detail',
	component: () =>
		import('../view/detail.vue'),
	meta: {
		isRefresh: true
	}
},

這個meta屬性,可以在詳情頁中通過this.$route.meta.isRefresh來讀取和設定。
設定完這個屬性,還要在App.vue檔案裡設定 watch 一下$route屬性。

watch: {
	$route(to, from) {
		const fname = from.name
		const tname = to.name
		if(from.meta.isRefresh || (fname != 'detail' && tname == 'list')) {
			from.meta.isRefresh = false
			// 在這裡重新請求資料
		}
	}
},

這樣就不需要在列表頁的created函式裡用 ajax 來請求資料了,統一放在App.vue裡來處理。
觸發請求資料有兩個條件:

  1. 從其他頁面(除了詳情頁)進來列表時,需要請求資料。
  2. 從詳情頁返回到列表頁時,如果詳情頁meta屬性中的isRefresh為true,也需求重新請求資料。

當我們在詳情頁中刪除了對應的列表項時,就可以將詳情頁meta屬性中的isRefresh設為true。這時再返回到列表頁,頁面會重新重新整理。