Vue.js:使用Vue-Router 2实现路由功能介绍


Posted in Javascript onFebruary 22, 2017

注意: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中,使用的是<a v-link="{path:'/index'}"></a>

在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')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
基于jQuery的message插件实现右下角弹出消息框
Jan 11 Javascript
利用jquery的获取JS文件中的字符串内容
Feb 14 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
下一代Bootstrap的5个特点 超酷炫!
Jun 17 Javascript
静态页面html中跳转传值的JS处理技巧
Jun 22 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
May 11 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
Aug 23 Javascript
js读取本地文件的实例
Dec 22 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
svg动画之动态描边效果
Feb 22 #Javascript
jQuery实现的简单拖动层示例
Feb 22 #Javascript
Bootstrap 3 进度条的实现
Feb 22 #Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 #Javascript
canvas 绘制圆形时钟
Feb 22 #Javascript
jquery实现数字输入框
Feb 22 #Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
Feb 22 #Javascript
You might like
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
PHP 上传文件大小限制
2009/07/05 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
JavaScript将取代AppleScript?
2014/09/18 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
2015/11/03 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
2019/12/25 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python上下文管理器和with块详解
2017/09/09 Python
python实现flappy bird游戏
2018/12/24 Python
python 阶乘累加和的实例
2019/02/01 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python静态类型检查新工具之pyright 使用指南
2019/04/26 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Python使用graphviz画流程图过程解析
2020/03/31 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
小车司机岗位职责
2013/11/25 职场文书
幼儿园父亲节活动方案
2014/03/11 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
创业计划书之废品回收
2019/09/26 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL