vue嵌套路由与404重定向实现方法分析


Posted in Javascript onMay 04, 2018

本文实例讲述了vue嵌套路由与404重定向实现方法。分享给大家供大家参考,具体如下:

第一部分: vue嵌套路由

嵌套路由是什么?

嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思。  比如在vue中,我们如果不使用嵌套路由,那么只有一个<router-view>,但是如果使用,那么在一个组件中就还有<router-view>,这也就构成了嵌套。

为什么要使用嵌套路由?

就比如在一个页面中, 在页面的上半部分,有三个按钮,而下半部分是根据点击不同的按钮来显示不同的内容,那么我们就可以在这个组件中的下半部分看成是一个嵌套路由,也就是说在这个组件的下面需要再来一个<router-view>, 当我点击不同的按钮时,他们的router-link分别所指向的组件就会被渲染到这个<router-view>中。

官网是怎么介绍的?

每次说到官网,就要说一说百度,百度搜索千万别用。。

vue嵌套路由与404重定向实现方法分析

要说官网举得这个图,本意是好的,但是描述起来累赘太多。吐个槽。。

这就是实际生活中的一个很好的应用界面, 通常是由多层嵌套的组件组合而成。 同样的, URL中各段动态路径也按照某种结构对应嵌套的各层组件。如上所示。

即user表示用户页, 而user就可以看成是vue中的一个单页面,对于一个user,一定要有哪一个用户,这里的foo(小明、小红)就代表了一个用户,这里的profile可以理解为个人主页,这里的posts可以理解为这个人所发表的文章, 而title可能是不变的,比如无论切换到这个人发表的文章,还是切换到这个人的个人主页,我们都希望在最上方显示同样的东西,而在切换的时候换的就是下面的部分,这个部分我们就可以用<router-view>来写,那么,这,就是嵌套路由。

借助vue-router,使用嵌套路由配置,就可以很简单的表达这种关系。

<div id="app">
 <router-view></router-view>
</div>
const User = {
 template: `
  <div class="user">
   <h2>User {{ $route.params.id }}</h2>
   <router-view></router-view>
  </div>
 `
}
const router = new VueRouter({
 routes: [
  { path: '/user/:id', component: User,
   children: [
    {
     // 当 /user/:id/profile 匹配成功,
     // UserProfile 会被渲染在 User 的 <router-view> 中
     path: 'profile',
     component: UserProfile
    },
    {
     // 当 /user/:id/posts 匹配成功
     // UserPosts 会被渲染在 User 的 <router-view> 中
     path: 'posts',
     component: UserPosts
    },
    // 当 /user/:id 匹配成功,
    // UserHome 会被渲染在 User 的 <router-view> 中
    {
      path: '',
      component: UserHome
    },
     // ...其他子路由
   ]
  }
 ]
})

OK! 这大致就是嵌套路由了! 其中,第一段代码是在文件中放了<router-view>, 这是最顶层的出口,渲染高级路由匹配到的组件。

从路由配置中,我们可以看到: 当路径是 /user/小明 或者 /user/小红 时, 就会把User渲染到页面中,这个渲染的就是顶级路由。 (:id就是小明、小红,)。 然后这个页面中就有一个嵌套路由,当然,如果url就是 /user/小明的话,那么这个二级路由是什么都不会显示的, 如果我们希望即使只是 /user/小明, 也得渲染点什么,那么我们就可以设置 path: "" 所对应的路由,这样,即使 /user/小明 也是可以显示更多的了。

如果我们想看小明的个人主页,就是 /user/小明/profile 这时就会把 UserProfile 组件渲染到这个二级路由中了。

如果我们想看小明发表的文章,就是 /user/小明/posts 这时就会把 UserPost 组件渲染到这个二级路由中, 这也就是二级路由了。

其实概念就这么多,是不是很简单呢!

但是还需要注意下面几点:

1. 从上面的代码可以看出: 在组件中,我们可以通过 $route.params.id 来获取到user/小明/post 中的小明,这样,我们就可以进行个性化的设置了。

2. 以 / 开头的嵌套路径会被当做根路径, 这可以让你充分的使用嵌套组件而无需设置嵌套的路径。

也就是说: 在上面的代码中,我们在children下,写path: "profile", 就相当于拼接成了 /user/:id/profile ,当然,我们也可以直接写为 path: "/user/:id/profile" ,最终的结果是一样的,但是我个人认为后者的表示方法可以跟清晰的观察结构。 如果嵌套层数过多,可能会出错。

第二部分: 404重定向

有时,我们可能会输入错的 url, 或者不再存在等各种原因导致其不再能被访问,那么我们就可以对于这种情况进行重定向。 很简单,只要在路由中添加下面的代码就可以了:

{
   path: "*",
   redirect: "/"
}

即对于所有的(*代表所有)错误页面,我们都可以重定向到 "/" 中。

希望本文所述对大家vue.js程序设计有所帮助。

Javascript 相关文章推荐
jquery 防止表单重复提交代码
Jan 21 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
Feb 06 Javascript
JQuery获取样式中的background-color颜色值的问题
Aug 20 Javascript
Bootstrap每天必学之表单
Nov 23 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
js canvas实现擦除动画
Jul 16 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
layer弹出层中H5播放器全屏出错的解决方法
Feb 21 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
详解小程序缓存插件(mrc)
Aug 17 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 #Javascript
详解使用jQuery.i18n.properties实现js国际化
May 04 #jQuery
node实现的爬虫功能示例
May 04 #Javascript
基于jQuery.i18n实现web前端的国际化
May 04 #jQuery
JavaScript实现百度搜索框效果
Mar 26 #Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 #Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 #Javascript
You might like
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
jquery 选项卡效果 新手代码
2011/07/08 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
JavaScript中数据类型转换总结
2016/12/25 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
React Native 使用Fetch发送网络请求的示例代码
2017/12/02 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
Python 函数基础知识汇总
2018/03/09 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
基于python3实现倒叙字符串
2020/02/18 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
说一下Linux下有关用户和组管理的命令
2016/01/04 面试题
2014最新实习证明模板
2014/10/02 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
婚礼新人答谢词
2015/01/04 职场文书
中学生自我评价范文
2015/03/03 职场文书
赞助商致辞
2015/07/30 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
在Python中如何使用yield
2021/06/07 Python