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 相关文章推荐
Tab页界面,用jQuery及Ajax技术实现
Sep 21 Javascript
javascript 匿名函数的理解(透彻版)
Jan 28 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
Mar 29 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
js实现简单锁屏功能实例
May 27 Javascript
CSS3实现动态背景登录框的代码
Jul 28 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
Dec 02 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
angular中的http拦截器Interceptors的实现
Feb 21 Javascript
Vue2.0生命周期的理解
Aug 20 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
vue 移动端注入骨架屏的配置方法
Jun 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
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php检测图片木马多进制编程实践
2013/04/11 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
AngularJS Toaster使用详解
2017/02/24 Javascript
vue项目实战总结篇
2018/02/11 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
使用layui 的layedit定义自己的toolbar方法
2019/09/18 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python递归实现快速排序
2018/08/18 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
css3让div随鼠标移动而抖动起来
2014/02/10 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
canvas像素画板的实现代码
2018/11/21 HTML / CSS
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
工作鉴定评语
2014/05/04 职场文书
全运会口号
2014/06/20 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
档案管理员岗位职责
2015/02/12 职场文书
javaScript Array api梳理
2021/03/31 Javascript
python异步的ASGI与Fast Api实现
2021/07/16 Python
什么是SOLID
2022/03/24 Javascript