日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果

發布時間:2023/12/1 vue 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://github.com/woai3c/Front-end-articles?github.com

需求一:

在一個列表頁中,第一次進入的時候,請求獲取數據。

點擊某個列表項,跳到詳情頁,再從詳情頁后退回到列表頁時,不刷新。

也就是說從其他頁面進到列表頁,需要刷新獲取數據,從詳情頁返回到列表頁時不要刷新。

解決方案

在 App.vue設置:

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

假設列表頁為 list.vue,詳情頁為 detail.vue,這兩個都是子組件。

我們在 keep-alive 添加列表頁的名字,緩存列表頁。

然后在列表頁的 created 函數里添加 ajax請求,這樣只有第一次進入到列表頁的時候才會請求數據,當從列表頁跳到詳情頁,再從詳情頁回來的時候,列表頁就不會刷新。 這樣就可以解決問題了。

需求二:

在需求一的基礎上,再加一個要求:可以在詳情頁中刪除對應的列表項,這時返回到列表頁時需要刷新重新獲取數據。

我們可以在路由配置文件上對 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.nameconst tname = to.nameif (from.meta.isRefresh || (fname != 'detail' && tname == 'list')) {from.meta.isRefresh = false// 在這里重新請求數據}}},

這樣就不需要在列表頁的 created 函數里用 ajax 來請求數據了,統一放在 App.vue 里來處理。

觸發請求數據有兩個條件:

  • 從其他頁面(除了詳情頁)進來列表時,需要請求數據。
  • 從詳情頁返回到列表頁時,如果詳情頁 meta 屬性中的 isRefresh 為 true,也需要重新請求數據。
  • 當我們在詳情頁中刪除了對應的列表項時,就可以將詳情頁 meta 屬性中的 isRefresh 設為 true。這時再返回到列表頁,頁面會重新刷新。

    解決方案二

    對于需求二其實還有一個更簡潔的方案,那就是使用 router-view 的 key 屬性。

    <keep-alive><router-view :key="$route.fullPath"/> </keep-alive>

    首先 keep-alive 讓所有頁面都緩存,當你不想緩存某個路由頁面,要重新加載它時,可以在跳轉時傳一個隨機字符串,這樣它就能重新加載了。 例如從列表頁進入了詳情頁,然后在詳情頁中刪除了列表頁中的某個選項,此時從詳情頁退回列表頁時就要刷新,我們可以這樣跳轉:

    this.$router.push({path: '/list',query: { 'randomID': 'id' + Math.random() }, })

    這樣的方案相對來說還是更簡潔的。

    總結

    以上是生活随笔為你收集整理的vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。