前后端分离后,控制路由跳转的责任转移到了html" target="_blank">前端,后端只负责给前端返回一个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页面实践记录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
本文向大家介绍vue-cli单页应用改成多页应用配置详解,包括了vue-cli单页应用改成多页应用配置详解的使用技巧和注意事项,需要的朋友参考一下 前言 从接触vue开始用的是vue-cli直接搭建单页应用,参考配合着vue-router开发起来简直爽到吊炸天,但是由于项目越来越复杂了,单页用起来可能有点力不从心,能不能弄成多页面呢,查了相关资料得到的结论是完全可以的,能多页面多入口,并且可以使用
本文向大家介绍vue-router怎么配置404页面?相关面试题,主要包含被问及vue-router怎么配置404页面?时的应答技巧和注意事项,需要的朋友参考一下
本文向大家介绍Vue SPA单页应用首屏优化实践,包括了Vue SPA单页应用首屏优化实践的使用技巧和注意事项,需要的朋友参考一下 1.代码压缩(gzip) 如果你用的是nginx服务器,请修改配置文件(其他web server 类似):sudo nano /etc/nginx/nginx.conf 在Gzip Settings里加入: gzip 开启或者关闭 gzip 模块,这里使用 on 表示
本文向大家介绍vue配置多页面的实现方法,包括了vue配置多页面的实现方法的使用技巧和注意事项,需要的朋友参考一下 1.安装环境 ①安装node.js 并添加入环境变量PATH ②安装淘宝NPM镜像 ③安装webpack ④安装vue-cli脚手架 ⑤创建项目模板 vue init wepack vue-multipage-demo ⑥cmd进入到要放项目的文件夹 ⑦安装 cnpm install
本文向大家介绍Nginx中404页面的配置及AJAX请求返回404页面的方法,包括了Nginx中404页面的配置及AJAX请求返回404页面的方法的使用技巧和注意事项,需要的朋友参考一下 404页面基础配置 404错误是WWW网站访问容易出现的错误。最常见的出错提示:404 NOT FOUND。404错误页的设置对网站SEO有很大的影响,而设置不当,比如直接转跳主页等,会被搜索引擎降权拔毛。404
本文向大家介绍vue 如何添加全局函数或全局变量以及单页面的title设置总结,包括了vue 如何添加全局函数或全局变量以及单页面的title设置总结的使用技巧和注意事项,需要的朋友参考一下 传统的设置title的方法是:document.title = ‘title' 但是这种写法在iOS的微信上是不兼容的 这里设置title的方法是通过在百度搜索的所谓黑科技,避免了安卓和iOS的不兼容写法 首