亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

嘗試

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

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

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

vue-router方案

以下為前置頁面(即上一頁面)中的代碼示例,由于觸發(fā)了某種權(quán)限問題,需要重定向到某個默認頁面,這邊是以接口為例,當接口請求時,返回參數(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()

當接口無權(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)一些的,是我最近在做需求時解決的一個問題,當然,方案二也可以通過方案一類似的改寫,達到跟方案一一樣的效果

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

相關(guān)文章

  • 使用el-form-item設(shè)置標簽長度

    使用el-form-item設(shè)置標簽長度

    這篇文章主要介紹了使用el-form-item設(shè)置標簽長度方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue中配置scss全局變量的步驟

    vue中配置scss全局變量的步驟

    這篇文章主要介紹了vue中配置scss全局變量的步驟,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • vue-cli 介紹與安裝

    vue-cli 介紹與安裝

    這篇文章主要給大家介紹的是vue-cli 介紹與安裝,vue-cli是和vue進行深度組合的工具,可以快速幫我們創(chuàng)建vue項目,并且把一些腳手架相關(guān)的代碼給我們創(chuàng)建好。真正使用vue開發(fā)項目,都是用vue-cli來創(chuàng)建項目的,下面文章詳細內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Vue?使用postMessage?實現(xiàn)父子跨域通信

    Vue?使用postMessage?實現(xiàn)父子跨域通信

    這篇文章主要介紹了Vue應(yīng)用?postMessage?實現(xiàn)父子跨域通信,通過示例介紹了postMessage的使用,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • 解決VUE中document.body.scrollTop為0的問題

    解決VUE中document.body.scrollTop為0的問題

    今天小編就為大家分享一篇解決VUE中document.body.scrollTop為0的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 在 Vue 中使用 JSX 及使用它的原因淺析

    在 Vue 中使用 JSX 及使用它的原因淺析

    這篇文章主要介紹了在 Vue 中使用 JSX 及使用它的原因淺析,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 淺談vue項目可以從哪些方面進行優(yōu)化

    淺談vue項目可以從哪些方面進行優(yōu)化

    本篇文章主要介紹了淺談vue項目可以從哪些方面進行優(yōu)化,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vuex中g(shù)etters的基本用法解讀

    vuex中g(shù)etters的基本用法解讀

    這篇文章主要介紹了vuex中g(shù)etters的基本用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue響應(yīng)式原理與虛擬DOM實現(xiàn)步驟詳細講解

    Vue響應(yīng)式原理與虛擬DOM實現(xiàn)步驟詳細講解

    在Vue中最重要、最核心的概念之一就是響應(yīng)式系統(tǒng)。這個系統(tǒng)使得Vue能夠自動追蹤數(shù)據(jù)變化,并在數(shù)據(jù)發(fā)生變化時自動更新相關(guān)的DOM元素。本文將會探討Vue響應(yīng)式系統(tǒng)的實現(xiàn)原理及其底層實現(xiàn)
    2023-03-03
  • Vue項目中首頁長時間白屏的原因以及解決過程

    Vue項目中首頁長時間白屏的原因以及解決過程

    這篇文章主要介紹了Vue項目中首頁長時間白屏的原因以及解決過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論