欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年05月22日 10:05:33   作者:FrankCheung  
無論單頁還是多頁,我的實現思路是總體配置404頁面的思路就是在前端路由表中添加一個 path: '/404' 的路由,渲染相應的404頁面。這篇文章主要介紹了Vue單頁及多頁應用全局配置404頁面實踐,需要的朋友可以參考下

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

總體思路

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

SPA的404路由配置

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

路由表固定的情況

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

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

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

路由表動態(tài)生成的情況

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

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

// 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) // 動態(tài)添加可訪問路由表
 router.addRoutes(NotFoundRouterMap) // 添加404及重定向路由規(guī)則
 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路由配置

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

我采用的方案是在全局導航守衛(wèi)beforeEach中對路由匹配的情況進行判斷,這時候就需要用到vue導航守衛(wèi)中的 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頁面路由規(guī)則,并且為沒有配置404頁面的路由統(tǒng)一配置了默認的404頁面,感覺還是比較友好的。

總結

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

相關文章

  • vue3語法中使用vscode打開滿屏紅線報錯的完美解決方法

    vue3語法中使用vscode打開滿屏紅線報錯的完美解決方法

    這篇文章主要介紹了vue3語法中使用vscode打開滿屏紅線報錯的完美解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Vue數據表格增刪改查與表單驗證代碼詳解

    Vue數據表格增刪改查與表單驗證代碼詳解

    這篇文章主要給大家介紹了關于Vue數據表格增刪改查與表單驗證的相關資料,Vue可以通過使用組件化的方式來實現表格的增刪改查功能,文中通過圖文以及代碼介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 自定義vue全局組件use使用、vuex的使用詳解

    自定義vue全局組件use使用、vuex的使用詳解

    本篇文章主要介紹了自定義vue全局組件use使用、vuex的使用詳解,本文主要來講解一下怎么樣定義一個全局組件,并解釋vue.use()的原理
    2017-06-06
  • 一文詳細了解Vue?3.0中的onMounted和onUnmounted鉤子函數

    一文詳細了解Vue?3.0中的onMounted和onUnmounted鉤子函數

    Vue3.0引入了新的組件生命周期鉤子函數onMounted和onUnmounted,分別用于組件掛載后和卸載前的操作,這些鉤子函數為開發(fā)者提供了更多靈活性,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • vue如何在多個不同服務器下訪問不同地址

    vue如何在多個不同服務器下訪問不同地址

    這篇文章主要介紹了vue如何在多個不同服務器下訪問不同地址,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 少女風vue組件庫的制作全過程

    少女風vue組件庫的制作全過程

    這篇文章主要給大家介紹了關于少女風vue組件庫的制作全過程,文中通過示例代碼介紹的非常詳細,對大家學習或者使用vue具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • vue選項卡Tabs組件實現示例詳解

    vue選項卡Tabs組件實現示例詳解

    這篇文章主要為大家介紹了vue選項卡Tabs組件實現示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • vue綁定設置屬性的多種方式(5)

    vue綁定設置屬性的多種方式(5)

    這篇文章主要為大家詳細介紹了vue綁定設置屬性的多種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • vue-cli創(chuàng)建項目時由esLint校驗導致報錯或警告的問題及解決

    vue-cli創(chuàng)建項目時由esLint校驗導致報錯或警告的問題及解決

    這篇文章主要介紹了vue-cli創(chuàng)建項目時由esLint校驗導致報錯或警告的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • C#實現將一個字符轉換為整數

    C#實現將一個字符轉換為整數

    下面小編就為大家分享一篇C#實現將一個字符轉換為整數,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評論