vue 項目中當(dāng)訪問路由不存在的時候默認(rèn)訪問404頁面操作
前言:
在Vue項目中,當(dāng)訪問的頁面路由不存在或錯誤時,頁面顯示為一片空白。然而,通常我們需要對訪問url不存在或者錯誤的情況下添加默認(rèn)的404頁面,即not found頁面。
一般的處理方法是:
在最后添加一個path: * ,優(yōu)先級從上到下查找路由,都沒有的時候全部指向 404頁面 ,代碼如下:
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, // 動態(tài)面包屑標(biāo)題
title: ''
}
}
]
}
{
path: '*', // 頁面不存在的情況下會跳到404頁面
redirect: '/404',
name: 'notFound',
hidden: true
}
]
const router = new Router({
routes: baseRoute
})
問題:
這樣做好處是簡單,方便,但是因為我代碼里面添加了如下代碼,用于頁面token失效跳出登錄的時候記住當(dāng)前路由,當(dāng)下次再登錄的時候直接跳到指定路由
if (to.path.slice(1) !== '') {
router.push({
path: '/login',
query: {
redirect: to.path.slice(1)
}
})
} else {
router.push({
path: '/login'
})
}
就是因為加了所有找不到都指向404,導(dǎo)致了第一次不知道網(wǎng)址的人輸錯后,redirect就指向了404,這樣用戶第一次登錄成功后頁面就進(jìn)入404,體驗很差,產(chǎn)品和測試也一直以為是頁面出bug了,為了解決這個問題,查找了相關(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, // 動態(tài)面包屑標(biāo)題
title: ''
}
}
]
},
// {
// path: '*', // 頁面不存在的情況下會跳到404頁面
//redirect: '/404',
//name: 'notFound',
//hidden: true
//}
]
const router = new Router({
routes: baseRoute
})
2、在router.beforeEach 里面使用 to.matched 匹配出的路由個數(shù)來作為判斷條件,匹配不到路由就跳轉(zhuǎn)到404頁面,代碼如下
pemmision.js
代碼如下:
import router from './router'
import { getCookie } from './utils/auth'
// 通過beforeEach鉤子來判斷用戶是否登陸過 有無token
const whiteList = ['/login'] // 不重定向白名單
// const userInfo = getUserInfo()
router.beforeEach((to, from, next) => {
console.log(to.matched)
// 判斷是否有登錄過
if (getCookie('userId_dev')) {
// 如果包含userId_dev 從登錄頁面跳轉(zhuǎn) 直接跳轉(zhuǎn)到首頁 /
if (to.path === '/login') {
next()
} else {
if (to.matched.length === 0) {
next('/404') // 判斷此跳轉(zhuǎn)路由的來源路由是否存在,存在的情況跳轉(zhuǎn)到來源路由,否則跳轉(zhuǎn)到404頁面
}
next() // 如果匹配到正確跳轉(zhuǎn)
}
// 沒有登錄
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
// 還沒有登錄過 則跳轉(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'
})
}
}
}
})
這樣就解決了一開始輸錯就跳到404的尷尬了!
補充知識:Vue中用戶輸入無效地址,跳轉(zhuǎn)到錯誤提示頁面
1. 在動態(tài)路由中,有的路徑是無效路徑,可以讓無效的路勁跳轉(zhuǎn)到錯誤提示頁面
組件的$router屬性的原型上有一些方法(this.$router)

(1)go方法
(2)replace:用新的路徑替換錯誤路徑,同時創(chuàng)建錯誤頁面的組件
a——b(不存在的路徑)——c(用c取代了b);所以路徑中就是a——c
(3)push:a——b(不存在的路徑)——c(在b后面添加了c);所以路徑就是a——b——c

以上這篇vue 項目中當(dāng)訪問路由不存在的時候默認(rèn)訪問404頁面操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- vue使用動態(tài)添加路由(router.addRoutes)加載權(quán)限側(cè)邊欄的方式
- vue 解決addRoutes多次添加路由重復(fù)的操作
- vue addRoutes路由動態(tài)加載操作
- 使用VueRouter的addRoutes方法實現(xiàn)動態(tài)添加用戶的權(quán)限路由
- vue動態(tài)添加路由addRoutes之不能將動態(tài)路由存入緩存的解決
- vue 解決addRoutes動態(tài)添加路由后刷新失效問題
- vue addRoutes實現(xiàn)動態(tài)權(quán)限路由菜單的示例
- vue-router+vuex addRoutes實現(xiàn)路由動態(tài)加載及菜單動態(tài)加載
- vue-router4動態(tài)路由刷新404/白屏的解決
- vue訪問未定義的路由時重定向404問題
- vue3動態(tài)路由刷新后空白或者404問題的解決
- vue?使用addRoutes動態(tài)添加路由及刷新頁面跳轉(zhuǎn)404路由的問題解決方案
相關(guān)文章
VUE使用 wx-open-launch-app 組件開發(fā)微信打開APP功能
這篇文章主要介紹了VUE使用 wx-open-launch-app 組件開發(fā)微信打開APP功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
vue3修改link標(biāo)簽?zāi)J(rèn)icon無效問題詳解
這篇文章主要介紹了vue3修改link標(biāo)簽?zāi)J(rèn)icon無效問題詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue修改proxyTable解決跨域請求,報404的問題及解決
這篇文章主要介紹了vue修改proxyTable解決跨域請求,報404的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
vue emit之Property or method “$$v“ i
這篇文章主要介紹了vue emit之Property or method “$$v“ is not defined的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06

