使用Vue-Router 2实现路由功能实例详解


Posted in Javascript onNovember 14, 2017

vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,也就是组件的切换。

注意: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 1中,使用的是

在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-Router 2实现路由功能实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
总结JavaScript三种数据存储方式之间的区别
May 03 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
May 16 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
Jun 03 Javascript
完美实现js选项卡切换效果(二)
Mar 08 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
May 11 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
Sep 21 Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 Javascript
Seajs源码详解分析
Apr 02 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 #Javascript
js实现数组内数据的上移和下移的实例
Nov 14 #Javascript
vue router使用query和params传参的使用和区别
Nov 13 #Javascript
vue+vue-validator 表单验证功能的实现代码
Nov 13 #Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
Nov 13 #jQuery
Angular实现表单验证功能
Nov 13 #Javascript
mescroll.js上拉加载下拉刷新组件使用详解
Nov 13 #Javascript
You might like
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
jQuery each()方法的使用方法
2010/03/18 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
node网页分段渲染详解
2016/09/05 Javascript
js实现不提示直接关闭网页窗口
2017/03/30 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
Python单链表简单实现代码
2016/04/27 Python
python 字典(dict)按键和值排序
2016/06/28 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
python+selenium select下拉选择框定位处理方法
2019/08/24 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
python如何写出表白程序
2020/06/01 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
PHP如何设置和取得Cookie值
2015/06/30 面试题
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
php引用传递
2021/04/01 PHP
Python基础教程,Python入门教程(超详细)
2021/06/24 Python
PHP获取学生成绩的方法
2021/11/17 PHP
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android
python数据处理之Pandas类型转换
2022/04/28 Python
MySQL数据管理操作示例讲解
2022/12/24 MySQL