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 相关文章推荐
JS判断对象是否存在的10种方法总结
Dec 23 Javascript
js实现的map方法示例代码
Jan 13 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
vue resource post请求时遇到的坑
Oct 19 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
vuejs router history 配置到iis的方法
Sep 20 Javascript
详解关于webpack多入口热加载很慢的原因
Apr 24 Javascript
js canvas实现星空连线背景特效
Nov 01 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
Mar 06 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
Jan 03 Vue.js
浅谈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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
jQuery实现的淡入淡出图片轮播效果示例
2018/08/29 jQuery
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python 使用PIL中的resize进行缩放的实例讲解
2018/08/03 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
Python chardet库识别编码原理解析
2020/02/18 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
外语专业毕业生自我评价分享
2013/10/05 职场文书
超市营业员求职简历的自我评价
2013/10/17 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
体检通知范文
2015/04/21 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL