91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue單頁及多頁應用全局配置404頁面實踐記錄

發布時間:2020-10-14 09:34:42 來源:腳本之家 閱讀:107 作者:FrankCheung 欄目:web開發

前后端分離后,控制路由跳轉的責任轉移到了前端,后端只負責給前端返回一個html文檔以及提供各種接口。下面我們用作例子的兩個項目,均采用vue作為基礎框架,一個是SPA應用,另一個是多頁應用,均由前端進行路由控制及渲染的。

總體思路

無論單頁還是多頁,我的實現思路是總體配置404頁面的思路就是在前端路由表中添加一個 path: '/404' 的路由,渲染相應的404頁面。同時,配置一個規則,當在用戶可訪問的路由表中的所有路由都無法匹配的時候,自動跳轉重定向至該404頁面。下面來說一下針對單頁和多頁,我不同的實現方式。

SPA的404路由配置

單頁應用配置404頁面,也區分兩種情況:

路由表固定的情況

如果SPA的路由表是固定的,那么配置404頁面就變得非常的簡單。只需要在路由表中添加一個路徑為 404 的路由,同時 在路由表的最底部 配置一個路徑為 * 的路由,重定向至404路由即可。

(由于路由表是由上至下匹配的,一定要將任意匹配規則至于最底部,否則至于此路由規則下的路由將全部跳轉至404,無法正確匹配。)

// router.js
export default new Router({
 mode: 'history',
 routes: [
 // ...
 {
 name: '404',
 path: '/404',
 component: () => import('@/views/notFound.vue')
 },
 {
 path: '*', // 此處需特別注意至于最底部
 redirect: '/404'
 }
 ],
})

路由表動態生成的情況

路由表是動態生成的情況下,也就是說路由表分為兩部分,一部分為基礎路由表,另一部分是需要根據用戶的權限信息動態生成的路由表。

本項目中動態生成路由采用vue-router自帶的addRoutes方法,該方法是會將新的路由規則在原路由表數組的尾部注入的。由于任意匹配重定向至404頁面的規則必須至于路由表的最底部,所以此處我將重定向至404頁面的規則抽出,在動態路由注入后,再注入重定向規則,以確保該規則至于路由表最底部。

// router.js
export default new Router({
 mode: 'history',
 routes: [
 // ...
 {
 name: '404',
 path: '/404',
 component: () => import('@/views/notFound.vue')
 },
 // ...other codes
 ],
})
// notFoundRouterMap.js
export default [
 {
 name: '404',
 path: '/404',
 component: () => import('@/views/notFound.vue')
 },
 },
 {
 path: '*',
 redirect: '/404'
 }
]
// main.js
//...other codes
router.beforeEach((to, from, next) => {
 new Promise((resolve, reject) => {
 if (getCookie(tokenName)) {
 if (!getInfo()) {
 Promise.all([store.dispatch('getBasicInfo'), store.dispatch('getUserDetail')]).then(res => {
 store.dispatch('GenerateRoutes', { roles }).then(() => { 
 // 根據用戶權限生成可訪問的路由表
 router.addRoutes(store.getters.addRouters) // 動態添加可訪問路由表
 router.addRoutes(NotFoundRouterMap) // 添加404及重定向路由規則
 resolve({ ...to, replace: true }) // 重新加載一次路由,讓路由表更新成功后走下面else的判斷
 })
 
 })
 } else {
 // ...other codes
 }
 } else {
 window.location.href = '/login.html'
 }
 }).then(res => {
 if (res) {
 next(res)
 } else {
 next()
 }
 }).catch(err => {
 new Error(err)
 next(false)
 })

多頁應用的404路由配置

多頁應用區別于SPA的不同點是每個頁面有自己的一套路由,并且每個頁面可能有自己的一套404頁面風格,當然也可能沒有。這時候,就不能再采用動態添加路由規則的方法了。

我采用的方案是在全局導航守衛beforeEach中對路由匹配的情況進行判斷,這時候就需要用到vue導航守衛中的 matched 數組了。如果沒有一個匹配上的,那么就重定向至404頁面。當然,這個404頁面也單獨設置為一個頁面。

// permission.js
//...other codes
router.beforeEach((to, from, next) => {
 new Promise((resolve, reject) => {
 // ...other codes
 }).then(res => {
 if (!to.matched.length) {
 window.location = '/error.html#/404'
 return
 } 
 if (res) {
 next(res)
 } else {
 next()
 }
 }).catch(err => {
 new Error(err)
 next(false)
 })

這個方案就允許每個頁面有自己的404頁面路由規則,并且為沒有配置404頁面的路由統一配置了默認的404頁面,感覺還是比較友好的。

總結

以上所述是小編給大家介紹的Vue單頁及多頁應用全局配置404頁面實踐記錄,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大安市| 普陀区| 师宗县| 呼伦贝尔市| 康乐县| 湟源县| 商河县| 庆安县| 新源县| 谢通门县| 义马市| 建阳市| 于田县| 唐河县| 易门县| 柳河县| 洪湖市| 万荣县| 黑山县| 万安县| 郁南县| 黄大仙区| 永和县| 昌乐县| 泾川县| 河北区| 寿宁县| 鹤岗市| 抚顺县| 怀来县| 阿拉尔市| 马尔康县| 安多县| 东山县| 历史| 定安县| 政和县| 武邑县| 曲靖市| 大同县| 广德县|