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 相关文章推荐
Google 静态地图API实现代码
Nov 19 Javascript
Jquery实现图片预加载与延时加载的方法
Dec 22 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
Bootstrap登陆注册页面开发教程
Jul 12 Javascript
原生JS京东轮播图代码
Mar 22 Javascript
jQuery导航条固定定位效果实例代码
May 26 jQuery
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 Javascript
JavaScript undefined及null区别实例解析
Jul 21 Javascript
如何实现小程序与小程序之间的跳转
Nov 04 Javascript
js实现复制粘贴的两种方法
Dec 04 Javascript
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
原生jQuery实现只显示年份下拉框
Dec 24 jQuery
浅谈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 mcrypt可逆加密算法分析
2011/07/19 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
Yii2主题(Theme)用法详解
2016/07/23 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
laravel validate 设置为中文的例子(验证提示为中文)
2019/09/29 PHP
25个优雅的jQuery Tooltip插件推荐
2011/05/25 Javascript
新发现一个骗链接的方法(js读取cookies)
2012/01/11 Javascript
jquery使用remove()方法删除指定class子元素
2015/03/26 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
Node.JS循环删除非空文件夹及子目录下的所有文件
2018/03/12 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
Python面向对象类继承和组合实例分析
2018/05/28 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
python实现图片素描效果
2020/09/26 Python
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
临床专业自荐信
2014/06/22 职场文书
债务追讨律师函
2015/06/24 职场文书
汶川大地震感悟
2015/08/10 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
MySQL中order by的执行过程
2022/06/05 MySQL
JS高级程序设计之class继承重点详解
2022/07/07 Javascript