Vue-Router2.X多种路由实现方式总结


Posted in Javascript onFebruary 09, 2018

注意:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能。

推荐使用npm安装。

npm install vue-router

一、使用路由

在main.js中,需要明确安装路由功能:

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App.vue'
Vue.use(VueRouter)

1.定义组件,这里使用从其他文件import进来

import index from './components/index.vue'
import hello from './components/hello.vue'

2.定义路由

const routes = [
 { path: '/index', component: index },
 { path: '/hello', component: hello },
]

3.创建 router 实例,然后传 routes 配置

const router = new VueRouter({
 routes
})

4.创建和挂载根实例。通过 router 配置参数注入路由,从而让整个应用都有路由功能

const app = new Vue({
 router,
 render: h => h(App)
}).$mount('#app')

经过上面的配置之后呢,路由匹配到的组件将会渲染到App.vue里的<router-view></router-view>

那么这个App.vue里应该这样写:

<template>
 <div id="app">
  <router-view></router-view>
 </div>
</template>
index.html里呢要这样写:
<body>
 <div id="app"></div>
</body>

这样就会把渲染出来的页面挂载到这个id为app的div里了。

二、重定向 redirect

const routes = [
 { path: '/', redirect: '/index'},  // 这样进/ 就会跳转到/index
 { path: '/index', component: index }
]

三、嵌套路由

const routes = [
 { path: '/index', component: index,
  children: [
   { path: 'info', component: info}
  ]
  }
]

通过/index/info就可以访问到info组件了

四、懒加载

const routes = [
 { path: '/index', component: resolve => require(['./index.vue'], resolve) },
 { path: '/hello', component: resolve => require(['./hello.vue'], resolve) },
]

通过懒加载就不会一次性把所有组件都加载进来,而是当你访问到那个组件的时候才会加载那一个。对于组件比较多的应用会提高首次加载速度。

五、<router-link>

在vue-router 2中,使用了<router-link></router-link>替换1版本中的a标签

<!-- 字符串 -->
<router-link to="home">Home</router-link>
<!-- 渲染结果 -->
<a href="home" rel="external nofollow" >Home</a>
<!-- 使用 v-bind 的 JS 表达式 -->
<router-link v-bind:to="'home'">Home</router-link>
<!-- 不写 v-bind 也可以,就像绑定别的属性一样 -->
<router-link :to="'home'">Home</router-link>
<!-- 同上 -->
<router-link :to="{ path: 'home' }">Home</router-link>
<!-- 命名的路由 -->
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
<!-- 带查询参数,下面的结果为 /register?plan=private -->
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>

六、路由信息对象

1.$route.path

字符串,对应当前路由的路径,总是解析为绝对路径,如 "/foo/bar"。

2.$route.params

一个 key/value 对象,包含了 动态片段 和 全匹配片段,如果没有路由参数,就是一个空对象。

3.$route.query

一个 key/value 对象,表示 URL 查询参数。例如,对于路径 /foo?user=1,则有 $route.query.user == 1,如果没有查询参数,则是个空对象。

4.$route.hash

当前路由的 hash 值 (不带 #) ,如果没有 hash 值,则为空字符串。

5.$route.fullPath

完成解析后的 URL,包含查询参数和 hash 的完整路径。

6.$route.matched

一个数组,包含当前路由的所有嵌套路径片段的 路由记录 。路由记录就是 routes 配置数组中的对象副本(还有在 children 数组)。

综合上述,一个包含重定向、嵌套路由、懒加载的main.js如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'
Vue.use(VueRouter)
const router = new VueRouter({
 routes:[
 { path: '/', redirect: '/index' },
 { path: '/index', component: resolve => require(['./components/index.vue'], resolve),
  children:[
   { path: 'info', component: resolve => require(['./components/info.vue'], resolve) }
  ]
 },
 { path: '/hello', component: resolve => require(['./components/hello.vue'], resolve) },
 ]
})
const app = new Vue({
 router,
 render: h => h(App)
}).$mount('#app')

更详细的vue-router功能请参考文档:https://router.vuejs.org/zh-cn/

以上这篇Vue-Router2.X多种路由实现方式总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 组件之旅(二)编码实现和算法
Oct 28 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
浅谈JavaScript 框架分类
Nov 10 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
动态加载js的方法汇总
Feb 13 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
Angular2 Service实现简单音乐播放器服务
Feb 24 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
vue复合组件实现注册表单功能
Nov 06 Javascript
详解JavaScript的BUG和错误
May 07 Javascript
vue自定义底部导航栏Tabbar的实现代码
Sep 03 Javascript
详解vue几种主动刷新的方法总结
Feb 19 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 #Javascript
基于Vue2.X的路由和钩子函数详解
Feb 09 #Javascript
Vuejs 单文件组件实例详解
Feb 09 #Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 #Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 #Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 #Javascript
vue中使用ueditor富文本编辑器
Feb 08 #Javascript
You might like
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
JS动态日期时间的获取方法
2015/09/28 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
vue-router 路由基础的详解
2017/10/17 Javascript
vue如何将v-for中的表格导出来
2018/05/07 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
2019/02/01 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
使用Python对MySQL数据操作
2017/04/06 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python设置环境变量的作用整理
2020/02/17 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
python如何输出反斜杠
2020/06/18 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
水果超市创业计划书
2014/01/27 职场文书
家电业务员岗位职责
2014/03/10 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
村级环境卫生整治方案
2014/05/04 职场文书
小学优秀班集体申报材料
2014/05/25 职场文书
放飞梦想演讲稿800字
2014/08/26 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
党员进社区活动总结
2015/05/07 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Python 键盘事件详解
2021/11/11 Python