vue 項(xiàng)目中當(dāng)訪問(wèn)路由不存在的時(shí)候默認(rèn)訪問(wèn)404頁(yè)面操作
前言:
在Vue項(xiàng)目中,當(dāng)訪問(wèn)的頁(yè)面路由不存在或錯(cuò)誤時(shí),頁(yè)面顯示為一片空白。然而,通常我們需要對(duì)訪問(wèn)url不存在或者錯(cuò)誤的情況下添加默認(rèn)的404頁(yè)面,即not found頁(yè)面。
一般的處理方法是:
在最后添加一個(gè)path: * ,優(yōu)先級(jí)從上到下查找路由,都沒(méi)有的時(shí)候全部指向 404頁(yè)面 ,代碼如下:
const baseRoute = [ { path: '/login', name: 'login', component: Login }, {path: '/', redirect: '/index', component: Layout, name: 'dashboard'}, // 404page { path: '/404', name: 'page404', component: page404 }, { path: '/', redirect: '/index', component: Layout, children: [ { path: 'index', name: 'index', component: ModeIndex, meta: { title: '', // 設(shè)備建模 icon: '' } }, { path: 'project', name: 'project', component: Project, meta: { dynamic: true, // 動(dòng)態(tài)面包屑標(biāo)題 title: '' } } ] } { path: '*', // 頁(yè)面不存在的情況下會(huì)跳到404頁(yè)面 redirect: '/404', name: 'notFound', hidden: true } ] const router = new Router({ routes: baseRoute })
問(wèn)題:
這樣做好處是簡(jiǎn)單,方便,但是因?yàn)槲掖a里面添加了如下代碼,用于頁(yè)面token失效跳出登錄的時(shí)候記住當(dāng)前路由,當(dāng)下次再登錄的時(shí)候直接跳到指定路由
if (to.path.slice(1) !== '') { router.push({ path: '/login', query: { redirect: to.path.slice(1) } }) } else { router.push({ path: '/login' }) }
就是因?yàn)榧恿怂姓也坏蕉贾赶?04,導(dǎo)致了第一次不知道網(wǎng)址的人輸錯(cuò)后,redirect就指向了404,這樣用戶(hù)第一次登錄成功后頁(yè)面就進(jìn)入404,體驗(yàn)很差,產(chǎn)品和測(cè)試也一直以為是頁(yè)面出bug了,為了解決這個(gè)問(wèn)題,查找了相關(guān)資料,下面是優(yōu)化后的方法。
優(yōu)化后的設(shè)置方式:
1、route --> index.js
末尾去掉 * --> 404
const baseRoute = [ { path: '/login', name: 'login', component: Login }, {path: '/', redirect: '/index', component: Layout, name: 'dashboard'}, // 404page {path: '/404', component: page404, name: 'page404'}, { path: '/', redirect: '/index', component: Layout, children: [ { path: 'index', name: 'index', component: ModeIndex, meta: { title: '', // 設(shè)備建模 icon: '' } }, { path: 'project', name: 'project', component: Project, meta: { dynamic: true, // 動(dòng)態(tài)面包屑標(biāo)題 title: '' } } ] }, // { // path: '*', // 頁(yè)面不存在的情況下會(huì)跳到404頁(yè)面 //redirect: '/404', //name: 'notFound', //hidden: true //} ] const router = new Router({ routes: baseRoute })
2、在router.beforeEach 里面使用 to.matched 匹配出的路由個(gè)數(shù)來(lái)作為判斷條件,匹配不到路由就跳轉(zhuǎn)到404頁(yè)面,代碼如下
pemmision.js
代碼如下:
import router from './router' import { getCookie } from './utils/auth' // 通過(guò)beforeEach鉤子來(lái)判斷用戶(hù)是否登陸過(guò) 有無(wú)token const whiteList = ['/login'] // 不重定向白名單 // const userInfo = getUserInfo() router.beforeEach((to, from, next) => { console.log(to.matched) // 判斷是否有登錄過(guò) if (getCookie('userId_dev')) { // 如果包含userId_dev 從登錄頁(yè)面跳轉(zhuǎn) 直接跳轉(zhuǎn)到首頁(yè) / if (to.path === '/login') { next() } else { if (to.matched.length === 0) { next('/404') // 判斷此跳轉(zhuǎn)路由的來(lái)源路由是否存在,存在的情況跳轉(zhuǎn)到來(lái)源路由,否則跳轉(zhuǎn)到404頁(yè)面 } next() // 如果匹配到正確跳轉(zhuǎn) } // 沒(méi)有登錄 } else { if (whiteList.indexOf(to.path) !== -1) { next() } else { // 還沒(méi)有登錄過(guò) 則跳轉(zhuǎn)到登錄界面 // next('/login') if (to.path.slice(1) !== '') { if (to.matched.length === 0) { router.push({ path: '/login' }) } else { router.push({ path: '/login', query: { redirect: to.path.slice(1) } }) } } else { router.push({ path: '/login' }) } } } })
這樣就解決了一開(kāi)始輸錯(cuò)就跳到404的尷尬了!
補(bǔ)充知識(shí):Vue中用戶(hù)輸入無(wú)效地址,跳轉(zhuǎn)到錯(cuò)誤提示頁(yè)面
1. 在動(dòng)態(tài)路由中,有的路徑是無(wú)效路徑,可以讓無(wú)效的路勁跳轉(zhuǎn)到錯(cuò)誤提示頁(yè)面
組件的$router屬性的原型上有一些方法(this.$router)
(1)go方法
(2)replace:用新的路徑替換錯(cuò)誤路徑,同時(shí)創(chuàng)建錯(cuò)誤頁(yè)面的組件
a——b(不存在的路徑)——c(用c取代了b);所以路徑中就是a——c
(3)push:a——b(不存在的路徑)——c(在b后面添加了c);所以路徑就是a——b——c
以上這篇vue 項(xiàng)目中當(dāng)訪問(wèn)路由不存在的時(shí)候默認(rèn)訪問(wèn)404頁(yè)面操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue使用動(dòng)態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式
- vue 解決addRoutes多次添加路由重復(fù)的操作
- vue addRoutes路由動(dòng)態(tài)加載操作
- 使用VueRouter的addRoutes方法實(shí)現(xiàn)動(dòng)態(tài)添加用戶(hù)的權(quán)限路由
- vue動(dòng)態(tài)添加路由addRoutes之不能將動(dòng)態(tài)路由存入緩存的解決
- vue 解決addRoutes動(dòng)態(tài)添加路由后刷新失效問(wèn)題
- vue addRoutes實(shí)現(xiàn)動(dòng)態(tài)權(quán)限路由菜單的示例
- vue-router+vuex addRoutes實(shí)現(xiàn)路由動(dòng)態(tài)加載及菜單動(dòng)態(tài)加載
- vue-router4動(dòng)態(tài)路由刷新404/白屏的解決
- vue訪問(wèn)未定義的路由時(shí)重定向404問(wèn)題
- vue3動(dòng)態(tài)路由刷新后空白或者404問(wèn)題的解決
- vue?使用addRoutes動(dòng)態(tài)添加路由及刷新頁(yè)面跳轉(zhuǎn)404路由的問(wèn)題解決方案
相關(guān)文章
VUE使用 wx-open-launch-app 組件開(kāi)發(fā)微信打開(kāi)APP功能
這篇文章主要介紹了VUE使用 wx-open-launch-app 組件開(kāi)發(fā)微信打開(kāi)APP功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Taro+vue3?實(shí)現(xiàn)電影切換列表功能
我們做類(lèi)似于貓眼電影的小程序或者H5?的時(shí)候?我們會(huì)做到那種?左右滑動(dòng)的電影列表,這種列表一般帶有電影場(chǎng)次,我這個(gè)項(xiàng)目是基于Taro?+vue3?+ts?來(lái)寫(xiě)的用的組件庫(kù)也是京東的nut-ui以上的代碼和組件也有的是我二次封裝的組件,對(duì)vue3電影切換列表知識(shí),感興趣的朋友一起看看吧2024-01-01vue3修改link標(biāo)簽?zāi)J(rèn)icon無(wú)效問(wèn)題詳解
這篇文章主要介紹了vue3修改link標(biāo)簽?zāi)J(rèn)icon無(wú)效問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10vue修改proxyTable解決跨域請(qǐng)求,報(bào)404的問(wèn)題及解決
這篇文章主要介紹了vue修改proxyTable解決跨域請(qǐng)求,報(bào)404的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Vue中用props給data賦初始值遇到的問(wèn)題解決
這篇文章主要介紹了Vue中用props給data賦初始值遇到的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11vue emit之Property or method “$$v“ i
這篇文章主要介紹了vue emit之Property or method “$$v“ is not defined的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Mpvue中使用Vant Weapp組件庫(kù)的方法步驟
這篇文章主要介紹了Mpvue中使用Vant Weapp組件庫(kù)的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05