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 iframe内部出滚动条
Feb 11 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
用jquery中插件dialog实现弹框效果实例代码
Nov 15 Javascript
AngularJs bootstrap详解及示例代码
Sep 01 Javascript
JavaScript制作弹出层效果
Dec 02 Javascript
详解如何使用webpack在vue项目中写jsx语法
Nov 08 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
使用Vue调取接口,并渲染数据的示例代码
Oct 28 Javascript
react结合bootstrap实现评论功能
May 30 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
JavaScript实现音乐播放器
Aug 14 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
中国广播史趣谈 — 几个历史第一次
2021/03/01 无线电
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
一端时间轮换的广告
2006/06/26 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
js 毫秒转天时分秒的实例
2017/11/17 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
Python while 循环使用的简单实例
2016/06/08 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
python实现大转盘抽奖效果
2019/01/22 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
python实现AdaBoost算法的示例
2020/10/03 Python
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
EJB需直接实现它的业务接口或Home接口吗,请简述理由
2016/11/23 面试题
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
妇女工作先进事迹
2014/08/17 职场文书
离婚被告代理词
2015/05/23 职场文书
南京南京观后感
2015/06/02 职场文书
祝寿主持词
2015/07/02 职场文书
重阳节主题班会
2015/08/17 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL