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 相关文章推荐
tagName的使用,留一笔
Jun 26 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
Oct 06 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
jquery cookie的用法总结
Nov 18 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
node.js入门实例helloworld详解
Dec 23 Javascript
jQuery插件Validate实现自定义表单验证
Jan 18 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
JavaScript伪数组用法实例分析
Dec 22 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
vue中Axios的封装与API接口的管理详解
Aug 09 Javascript
微信小程序封装的HTTP请求示例【附升级版】
May 11 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
linux中cd命令使用详解
2015/01/08 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
仿新浪微博返回顶部的jquery实现代码
2012/10/01 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
2017/06/06 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
python 布尔操作实现代码
2013/03/23 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python 加密的实例详解
2017/10/09 Python
python实现Floyd算法
2018/01/03 Python
Python中存取文件的4种不同操作
2018/07/02 Python
Python Print实现在输出中插入变量的例子
2019/12/25 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
image-set实现Retina屏幕下图片显示详细介绍
2012/12/24 HTML / CSS
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
cf收人广告词大全
2014/03/14 职场文书
协议书怎么写
2014/04/21 职场文书
红领巾广播站广播稿
2014/10/19 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
pandas中DataFrame数据合并连接(merge、join、concat)
2021/05/30 Python
常用的Python代码调试工具总结
2021/06/23 Python
mysql联合索引的使用规则
2021/06/23 MySQL
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript
python中validators库的使用方法详解
2022/09/23 Python