vue-router 路由基础的详解


Posted in Javascript onOctober 17, 2017

vue-router 路由基础的详解

今天我总结了一下vue-route基础,vue官方推荐的路由。

一、起步

HTML

<div id="myDiv">
 <h1>简单路由</h1>
 <router-link to="/foo">Go to foo</router-link>  
 <router-link to="/bar">Go to bar</router-link>  

// 渲染出口
 <router-view></router-view>
</div>

创建模板(组件):

(也可以用import 引入外部组件)

var foo={template:"<p>我是foo 组件</p>"};
  var bar={template:"<p>我是bar 组件</p>"};

组件注入路由:

var routes = [
   {path:'/foo',component:foo},
   {path:'/bar',component:b ar},
  ];

创建路由实例:

// 这里还可以传入其他配置
const router = new VueRouter({
   routes   // (缩写)相当于 routes: routes; 
  });

注意这里 routes 没有 ‘ r ' (不要写成 routers)

创建vue实例(并挂载实例)

var routerVue = new Vue({
   router
  }).$mount("#myDiv");

二、动态路由匹配

有时候我们需要的是模板结构一样,当时数据不一样,就相当于我们要把不同ID的登录用户连接到同一个页面,但要显示每个用户的独立信息,这时我们就用到了动态路由匹配。

动态路由主要用到了全局 $route.params 和路由的动态参数,全局route 的 params API 存储着 路由的所有参数,路径的参数用 “ : ”来标记:

HTML

<div id="myDiv">
// 点击对应链接时传入对应参数foo 和 bar
 <router-link to="/User/:foo">Go to foo</router-link> 
 <router-link to="/User/:bar">Go to bar</router-link> 

  <router-view></router-view>
</div>

JS

const User = {
   template:'<p>我的ID是{{ $route.params.id }}</p>',
// 在路由切换时可以观察路由
   watch:{
    '$route'(to,form){
     console.log(to); //要到达的
     console.log(form);
    }
   }
  }

  const router = new VueRouter({
   routes:[
     {path:'/user/:id',component:User} // 标记动态参数 id
   ]
  });

  var myVue = new Vue({
    router
  }).$mount("#myDiv")

三、嵌套路由

1.嵌套路由讲的是我们可以在 <router-view>中去在渲染 <router-view> 这时要在配置路由时使用 children

例如:

HTML:

<div id="myDiv">
 <router-link to="/User/:foo">Go to foo</router-link> 
 <router-link to="/User/:bar">Go to bar</router-link> 

  <router-view></router-view>
</div>

JS:

const User = {
   template:'<div><p>我的ID是{{ $route.params.id }}</p><router-link to="/user/childone">ChildOne</router-link><router-link to="/user/childtwo">ChildOne</router-link><router-view></router-view></div>',
   }

   // 子路由
   const userChildOne = {
    template:'<div>我是 userChildOne</div>'
   }
   const userChildTwo = {
    template:'<div>我是 userChildTwo</div>'
   }
  const router = new VueRouter({
   routes:[
     {path:'/user/:id',component:User,
      children:[ // 用法和参数和routes 一样
       {path:"/user/childone",component:userChildOne},
       {path:"/user/childtwo",component:userChildTwo}
      ]

     }
   ]
  });

  var myVue = new Vue({
    router
  }).$mount("#myDiv")

四、命名路由

1.给路由命名指定路路由跳转,要用到参数name 和 v-bind

HTML:

<div id="myDiv">
<!-- 要用v-bind 的绑定to -->
 <router-link :to="{name:'userOne',params:{userId:'123'}}">Go to foo</router-link> 
 <router-link :to="{name:'userTwo',params:{userId:'456'}}">Go to bar</router-link> 

  <router-view></router-view>
</div>

JS:

const User = {
   template:'<p>我的ID是{{ $route.params.userId }}</p>',
   watch:{
    '$route'(to,form){
     console.log(to);
     console.log(form);
    }
   }
  }

  const router = new VueRouter({
   routes:[
   // name 一一对应上
     {path:'/user/:userId',name:"userOne",component:User},
     {path:'/user/:userId',name:"userTwo",component:User}
   ]
  });

  var myVue = new Vue({
    router
  }).$mount("#myDiv")

五、命名视图

1.给渲染视图 router-view 命名,来制定让那个视图渲染组件

HTML:

<div id="myDiv">
<!-- 要用v-bind 的绑定to -->
 <router-link :to="{name:'userOne',params:{userId:'123'}}">Go to foo</router-link> 
 <router-link :to="{name:'userTwo',params:{userId:'456'}}">Go to bar</router-link> 
<!-- 视图命名 如果不写name 则为默认为 default-->
  <router-view></router-view>
  <router-view name='b'></router-view>
</div>

JS:

// 四个模板
  const UserA = {
   template:'<p>我是one,ID是{{ $route.params.userId }}</p>',
  }
  const UserB = {
   template:'<p>我是two,ID是{{ $route.params.userId }}</p>',
  }
  const UserC = {
   template:'<p>我是three,ID是{{ <1ro></1ro>ute.params.userId }}</p>',
  }
  const UserD = {
   template:'<p>我是four,ID是{{ $route.params.userId }}</p>',
  }
  const router = new VueRouter({
   routes:[
   // name 一一对应上
     { 
      path:'/user/:userId',
      name:"userOne",
      components:{ // 注意这里为components 多个“ s ”
        default:UserA,
        b:UserB
      }
     },
     { 
      path:'/user/:userId',
      name:"userTwo",
      components:{
        default:UserD,
        b:UserC
      }
    }
   ]
  });

  var myVue = new Vue({
    router
  }).$mount("#myDiv")

六、重定向 和 别名

重定向 和别名,首先我先来解释一下什么叫做重定向和别名

『重定向』的意思是,当用户访问 /a时,URL 将会被替换成 /b,然后匹配路由为 /b,

『别名』 /a 的别名是 /b,意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a,就像用户访问 /a 一样。/a 的别名是 /b,意味着,当用户访问 /b 时,URL 会保持为 /b,但是路由匹配则为 /a,就像用户访问 /a 一样。
重定向主要用参数:redirect 而别名主要用到参数: alias

HTML:

<div id="myDiv">
 <h2>效果查看地址栏最后面的变化</h2>
 <router-link to="/User/foo">Go to foo</router-link> 
 <router-link to="/User/bar">Go to bar</router-link> 
 <router-link to="/User/Car">Go to bar</router-link> 

  <router-view></router-view>
</div>

JS:

const User = {
   template:'<p>我是同一个页面</p>',
  }
  const router = new VueRouter({
   mode:"history",
   routes:[
     { path:'/User/foo',component:User},
     { path:'/User/bar',redirect: '/User/foo',component:User},
     // 重定向的目标也可以是一个命名的路由:
     // 甚至是一个方法,动态返回重定向目标:

     // 别名设置
     { path:'/User/foo',alias: '/User/Car'}

   ]
  });

  var myVue = new Vue({ 
    router
  }).$mount("#myDiv")

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
Javascript - HTML的request类
Jan 09 Javascript
给事件响应函数传参数的四种方式小结
Dec 05 Javascript
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
详解jquery中$.ajax方法提交表单
Nov 03 Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 jQuery
关于Vue在ie10下空白页的debug小结
May 02 Javascript
深入理解js 中async 函数的含义和用法
May 13 Javascript
JS数组实现分类统计实例代码
Sep 30 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
axios+Vue实现上传文件显示进度功能
Apr 14 Javascript
如何抽象一个Vue公共组件
Oct 17 #Javascript
vue实现图书管理demo详解
Oct 17 #Javascript
基于Vue实现图书管理功能
Oct 17 #Javascript
Vue.js简易安装和快速入门(第二课)
Oct 17 #Javascript
什么是Vue.js框架 为什么选择它?
Oct 17 #Javascript
node使用Koa2搭建web项目的方法
Oct 17 #Javascript
Node 自动化部署的方法
Oct 17 #Javascript
You might like
php mysql数据库操作类
2008/06/04 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
jquery.cookie.js实现用户登录保存密码功能的方法
2016/04/15 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python中的自省(反射)详解
2015/06/02 Python
python开发中range()函数用法实例分析
2015/11/12 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python面向对象 反射原理解析
2019/08/12 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
python标准库OS模块详解
2020/03/10 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
员工考核管理制度
2014/02/02 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
博士生专家推荐信
2015/03/25 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
安全守法证明
2015/06/23 职场文书
python 镜像环境搭建总结
2022/09/23 Python