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 相关文章推荐
nicejforms——美化表单不用愁
Feb 20 Javascript
基于jquery的滚动新闻列表
Jun 19 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
Sep 29 Javascript
当json键为数字时的取值方法解析
Nov 15 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
node+express+ejs制作简单页面上手指南
Nov 26 Javascript
jquery实现简单合拢与展开网页面板的方法
Sep 01 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
基于js实现的限制文本框只可以输入数字
Dec 05 Javascript
简单实现Bootstrap标签页
Aug 09 Javascript
JS实现的Unicode编码转换操作示例
Apr 28 Javascript
js+html5生成自动排列对话框实例
Oct 09 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中的替代语法简介
2014/08/22 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
js onmousewheel事件多次触发问题解决方法
2014/10/17 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
Vue数据驱动模拟实现3
2017/01/11 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python实现求一个集合所有子集的示例
2018/05/04 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
opencv实现简单人脸识别
2021/02/19 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python实现一个优先级队列的方法
2020/07/31 Python
CSS3实现可翻转的hover效果
2018/05/23 HTML / CSS
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
Prototype如何更新局部页面
2013/03/03 面试题
学生个人的自我评价分享
2013/11/05 职场文书
大学生职业生涯规划范文
2013/12/31 职场文书
农林经济管理专业自荐信
2014/09/01 职场文书
股指期货心得体会
2014/09/10 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
身份证丢失证明
2015/06/19 职场文书
个人工作决心书
2015/09/22 职场文书
详解Python内置模块Collections
2022/03/22 Python
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers