最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Vue如何在頁面刷新時進行重定向

 更新時間:2025年01月02日 10:13:10   作者:Koranto  
這篇文章主要為大家詳細介紹了Vue如何在頁面刷新時進行重定向,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考一下

嘗試

今天處理一個頁面重定向問題的時候,碰到了一個卡點,那就是如何在頁面卸載時進行頁面導(dǎo)航重定向,當(dāng)時試了三個方法,都失敗了

1是通過onUnmounted,在組件卸載時做重定向

onUnmounted(() => {
    window.location.replace(redirectUrl.value);
});

2是通過onBeforeRouteLeave,在路由切換刷新時做重定向

onBeforeRouteLeave(async (to, from, next) => {
    next(redirectUrl.value);
});

3是通過window監(jiān)聽beforeunload事件,在頁面卸載時做重定向

useEventListener(window, 'beforeunload', () => {
    window.location.replace(redirectUrl.value);
});

但是這三個方法都失敗了,于是我思考著在頁面卸載時做重定向刷新是否存在可行性

通過查找資料,我知道了第三點失敗的原因:

參考文章:使用JavaScript監(jiān)視有沒有被刷新后跳轉(zhuǎn)其他頁面

經(jīng)過一番摸索,我找到了兩個較為可靠的解決方案

1是通過vue-router,在從上一個頁面導(dǎo)航到當(dāng)前頁面時,在路徑最后加一個參數(shù),等到進入了另一個頁面,在其onBeforeMount鉤子中通過$router.replace將該參數(shù)修改,之后在當(dāng)前頁面刷新時,去取這個參數(shù),如果不是最開始傳過來的參數(shù),則在onBeforeMount鉤子中將其重定向回上一個頁面

2是通過Session Storage或Local Storage來實現(xiàn),可以在刷新前將信息存儲在本地存儲中,然后在頁面加載時檢查是否存在該信息,如果存在,則進行頁面跳轉(zhuǎn)。

vue-router方案

以下為前置頁面(即上一頁面)中的代碼示例,由于觸發(fā)了某種權(quán)限問題,需要重定向到某個默認頁面,這邊是以接口為例,當(dāng)接口請求時,返回參數(shù)提示無權(quán)限,則重定向到無權(quán)限頁面

async function aiCandidateOutReport() {
    try {
        ...
        if(loading.value) return;
        loading.value = true;
        const { code, data } = await xxxApi({ token: token.value });
        if (code !== 0) {
                $router.push(`/no-permission?redirectUrl=${encodeURIComponent(window.location.href)}&noRedirect=1`);
            return;
        }
        ...
    } catch (error) {
        console.log(error);
    } finally {
        loading.value = false;
    }
}
aiCandidateOutReport()

當(dāng)接口無權(quán)限(這里用code不等于0類比),則向history棧中推一條路由,之后頁面跳轉(zhuǎn)至no-permission對應(yīng)下的無權(quán)限頁面

因為在頁面卸載時做重定向行不通,那就換個思路,在頁面加載時進行重定向判斷====》》

在無權(quán)限頁面中,可以通過onBeforeMount鉤子在頁面加載時判斷是否重定向

// redirectUrl解碼
const redirectUrl = computed(() => decodeURIComponent($route.query.redirectUrl as string));


onBeforeMount(() => {
    const noRedirect = $route.query.noRedirect;
    if (noRedirect === '0') {
        window.location.replace(redirectUrl.value);
    }
    $router.replace({ query: { ...$route.query, noRedirect: 0 } });
});

關(guān)鍵點在于由前置頁面向無權(quán)限頁面跳轉(zhuǎn)時傳遞的路由參數(shù)redirectUrl=${encodeURIComponent(window.location.href)} 和 noRedirect=1

到達無權(quán)限頁面后從$route中將兩個參數(shù)提取出來,并且在初次加載時就將 noRedirect 由1替換為0,此后每次刷新,都會在onBeforeMount鉤子中進入if (noRedirect === '0')的條件判斷中,重定向回前置頁面,進入前置頁面后走前置頁面的邏輯,如果還是無權(quán)限,則繼續(xù)跳轉(zhuǎn)無權(quán)限頁面,再在刷新時重定向回去,直到前置頁面有權(quán)限后停留在前置頁面

Storage方案

這個方案比上一個方案更加簡單一點,只需要在beforeunload事件中將自己錨定的標識參數(shù)setItem至sessionStorage中,在load事件中去檢查是否有該屬性,如果改屬性存在,則將其清空后重定向回自己想要的頁面

示例代碼如下

// 添加事件監(jiān)聽器
window.addEventListener('beforeunload', function (event) {
  console.log("在這里執(zhí)行您想要的操作,例如存儲信息到本地存儲")
  sessionStorage.setItem('refreshed', 'true');
});


// 在頁面加載時檢查本地存儲中的信息
window.addEventListener('load', function () {
  const refreshed = sessionStorage.getItem('refreshed');


  console.log(" 如果本地存儲中的信息存在,則進行頁面跳轉(zhuǎn)")
  if (refreshed === 'true') {
    // 清除本地存儲中的信息,以防止再次觸發(fā)跳轉(zhuǎn)
    sessionStorage.removeItem('refreshed');


    // 執(zhí)行頁面跳轉(zhuǎn)到另一個頁面
    window.location.href = 'https://xxx/123/index.html';
  }
});

兩個方案各有好處,vue-router方案可以重定向回自己想要的,帶著特定參數(shù)的頁面中;Storage方案中,你可以重定向到任何你想要去的無需帶路由參數(shù)的頁面中(因為既然你已經(jīng)有路由參數(shù)和完整路由了,實際上并不需要這個頁面)

方案一是與業(yè)務(wù)強相關(guān)一些的,是我最近在做需求時解決的一個問題,當(dāng)然,方案二也可以通過方案一類似的改寫,達到跟方案一一樣的效果

到此這篇關(guān)于詳解Vue如何在頁面刷新時進行重定向的文章就介紹到這了,更多相關(guān)Vue頁面刷新時重定向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue封裝Animate.css動畫庫的使用方式

    vue封裝Animate.css動畫庫的使用方式

    這篇文章主要介紹了vue封裝Animate.css動畫庫的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 使用keep-alive時,數(shù)據(jù)無法刷新的問題及解決

    使用keep-alive時,數(shù)據(jù)無法刷新的問題及解決

    這篇文章主要介紹了使用keep-alive時,數(shù)據(jù)無法刷新的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 如何在 ant 的table中實現(xiàn)圖片的渲染操作

    如何在 ant 的table中實現(xiàn)圖片的渲染操作

    這篇文章主要介紹了如何在 ant 的table中實現(xiàn)圖片的渲染操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue.js項目中vue.config.js常用配置項介紹

    Vue.js項目中vue.config.js常用配置項介紹

    在VueCLI項目中,vue.config.js用于自定義構(gòu)建、開發(fā)和部署流程,本文詳細解析了其常用配置項,包括基礎(chǔ)路徑、開發(fā)服務(wù)器、Webpack配置、CSS預(yù)處理、插件選項及環(huán)境變量管理等,并,通過代碼示例幫助開發(fā)者高效管理項目配置,提升開發(fā)體驗
    2026-05-05
  • Vue登錄后添加動態(tài)路由并跳轉(zhuǎn)的實踐分享

    Vue登錄后添加動態(tài)路由并跳轉(zhuǎn)的實踐分享

    這篇文章講給大家詳細介紹一下Vue如何實現(xiàn)登錄后添加動態(tài)路由并跳轉(zhuǎn),文章通過代碼示例介紹的非常詳細,對我們的學(xué)習(xí)或工作有一定的的幫助,需要的朋友可以參考下
    2023-07-07
  • element-plus 如何設(shè)置 el-date-picker 彈出框位置

    element-plus 如何設(shè)置 el-date-picker 彈出框位置

    el-date-picker 組件會自動根據(jù)空間范圍進行選擇比較好的彈出位置,但特定情況下,它自動計算出的彈出位置并不符合我們的實際需求,故需要我們手動設(shè)置,這篇文章主要介紹了element-plus 如何設(shè)置 el-date-picker 彈出框位置,需要的朋友可以參考下
    2024-07-07
  • Vue.js項目模板搭建圖文教程

    Vue.js項目模板搭建圖文教程

    下面小編就為大家?guī)硪黄猇ue.js項目模板搭建圖文教程。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue輕松實現(xiàn)虛擬滾動的示例代碼

    vue輕松實現(xiàn)虛擬滾動的示例代碼

    移動端網(wǎng)頁的日常開發(fā)中,偶爾會包含一些渲染長列表的場景,本文主要介紹了vue 虛擬滾動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue實現(xiàn)滑塊拖拽校驗功能的全過程

    vue實現(xiàn)滑塊拖拽校驗功能的全過程

    vue驗證滑塊功能,在生活中很多地方都可以見到,使用起來非常方便,這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)滑塊拖拽校驗功能的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)詳解

    vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)詳解

    頁面跳轉(zhuǎn),我們一般都通過路由跳轉(zhuǎn)實現(xiàn),通常情況下可直接使用router-link標簽實現(xiàn)頁面跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于vue如何通過點擊事件實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-07-07

最新評論

湖南省| 三门县| 新兴县| 乌兰县| 盐边县| 如皋市| 莆田市| 元谋县| 独山县| 安康市| 威宁| 仪陇县| 务川| 新丰县| 阳东县| 忻城县| 吉林省| 丹棱县| 玛曲县| 敦化市| 南投市| 潍坊市| 福贡县| 上蔡县| 偏关县| 清原| 黄平县| 会宁县| 崇阳县| 慈利县| 崇左市| 江川县| 陆川县| 长治市| 霍林郭勒市| 沙田区| 青海省| 郸城县| 东乌| 嵊泗县| 雷波县|