vue-router 的基本使用

1. 什么是 vue-router

vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项中组件的切换。

vue-router 的官方文档地址:https://router.vuejs.org/zh/

2. vue-router 安装和配置的步骤

① 安装 vue-router 包
② 创建路由模块
③ 导入并挂载路由模块
④ 声明路由链接和占位符

2.1 在项目中安装 vue-router

在 vue2 的项目中,安装 vue-router 的命令如下:

2.2 创建路由模块

在 src 源代码目录下,新建 router/index.js 路由模块,并初始化如下的代码:

import Vue from 'vue'
import VueRouter from 'vue-router'
import pathArr from '@/router/pathArr.js'// 导入需要的组件
import Login from '@/components/MyLogin.vue'
import Home from '@/components/MyHome.vue'import Users from '@/components/menus/MyUsers.vue'
import Rights from '@/components/menus/MyRights.vue'
import Goods from '@/components/menus/MyGoods.vue'
import Orders from '@/components/menus/MyOrders.vue'
import Settings from '@/components/menus/MySettings.vue'
import UserDetail from '@/components/user/MyUserDetail.vue'Vue.use(VueRouter)const router = new VueRouter({routes: [{ path: '/', redirect: '/login' },// 登录的路由规则{ path: '/login', component: Login },// 后台主页的路由规则{path: '/home',component: Home,redirect: '/home/users',children: [{ path: 'users', component: Users },{ path: 'rights', component: Rights },{ path: 'goods', component: Goods },{ path: 'orders', component: Orders },{ path: 'settings', component: Settings },// 用户详情页的路由规则{ path: 'userinfo/:id', component: UserDetail, props: true }]}]
})// 全局前置守卫
router.beforeEach(function(to, from, next) {if (pathArr.indexOf(to.path) !== -1) {const token = localStorage.getItem('token')if (token) {next()} else {next('/login')}} else {next()}
})export default router

2.3 导入并挂载路由模块

在 src/main.js 入口文件中,导入并挂载路由模块。示例代码如下:

官网挂在路由模块介绍:

// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [{ path: '/foo', component: Foo },{ path: '/bar', component: Bar }
]// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({routes // (缩写) 相当于 routes: routes
})// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({router
}).$mount('#app')// 现在,应用已经启动了!

实际开发中:

import Vue from 'vue'
import App from './App.vue'
// 导入路由模块,目的:拿到路由的实例对象
// 在进行模块化导入的时候,如果给定的是文件夹,则默认导入这个文件夹下,名字叫做 index.js 的文件
//相当于import router from '@/router/index.js'
//下面的这种写法,程序会自动导入相应的index.js文件
import router from '@/router'Vue.config.productionTip = falsenew Vue({render: h => h(App),// 在 Vue 项目中,要想把路由用起来,必须把路由实例对象,通过下面的方式进行挂载// router: 路由的实例对象//下面是简写的方式,相当于:   router:router//当key和value的值相同的时候就可以使用简写的方式router
}).$mount('#app')

2.4 声明路由链接和占位符

在 src/App.vue 组件中,使用 vue-router 提供的router-link标签和 router-view标签声明路由链接和占位符:

官网中声明路由链接和占位符:
实际开发中:

<template><div class="app-container"><h1>App2 组件</h1><!-- 当安装和配置了 vue-router 后,就可以使用 router-link 来替代普通的 a 链接了 --><!-- <a href="#/home">首页</a> --><router-link to="/home">首页</router-link><!-- 注意1:在 hash 地址中, / 后面的参数项,叫做“路径参数” --><!-- 在路由“参数对象”中,需要使用 this.$route.params 来访问路径参数 --><!-- 注意2:在 hash 地址中,? 后面的参数项,叫做“查询参数” --><!-- 在路由“参数对象”中,需要使用 this.$route.query 来访问查询参数 --><!-- 注意3:在 this.$route 中,path 只是路径部分;fullPath 是完整的地址 --><!-- 例如: --><!-- /movie/2?name=zs&age=20 是 fullPath 的值 --><!-- /movie/2 是 path 的值 --><router-link to="/movie/1">洛基</router-link><router-link to="/movie/2?name=zs&age=20">雷神</router-link><router-link to="/movie/3">复联</router-link><router-link to="/about">关于</router-link><hr /><!-- 只要在项目中安装和配置了 vue-router,就可以使用 router-view 这个组件了 --><!-- 它的作用很单纯:占位符 --><router-view></router-view></div>
</template><script>
export default {name: 'App'
}
</script><style lang="less" scoped>
.app-container {background-color: #efefef;overflow: hidden;margin: 10px;padding: 15px;> a {margin-right: 10px;}
}
</style>

router-link相当于a标签,触发需要加载的页面,需要加载的页面被触发之后,会自动加载到router-view标签中显示。

3. 声明路由的匹配规则

在 src/router/index.js 路由模块中,通过 routes 数组声明路由的匹配规则。示例代码如下:


实际开发中:

// src/router/index.js 就是当前项目的路由模块
import Vue from 'vue'
import VueRouter from 'vue-router'// 导入需要的组件
import Home from '@/components/Home.vue'
import Movie from '@/components/Movie.vue'
import About from '@/components/About.vue'import Tab1 from '@/components/tabs/Tab1.vue'
import Tab2 from '@/components/tabs/Tab2.vue'import Login from '@/components/Login.vue'
import Main from '@/components/Main.vue'// 把 VueRouter 安装为 Vue 项目的插件
// Vue.use() 函数的作用,就是来安装插件的
Vue.use(VueRouter)// 创建路由的实例对象
const router = new VueRouter({// routes 是一个数组,作用:定义 “hash 地址” 与 “组件” 之间的对应关系routes: [// 重定向的路由规则{ path: '/', redirect: '/home' },// 路由规则{ path: '/home', component: Home },// 需求:在 Movie 组件中,希望根据 id 的值,展示对应电影的详情信息// 可以为路由规则开启 props 传参,从而方便的拿到动态参数的值{ path: '/movie/:mid', component: Movie, props: true },{path: '/about',component: About,// redirect: '/about/tab1',children: [// 子路由规则// 默认子路由:如果 children 数组中,某个路由规则的 path 值为空字符串,则这条路由规则,叫做“默认子路由”{ path: '', component: Tab1 },{ path: 'tab2', component: Tab2 }]},{ path: '/login', component: Login },{ path: '/main', component: Main }]
})// 为 router 实例对象,声明全局前置导航守卫
// 只要发生了路由的跳转,必然会触发 beforeEach 指定的 function 回调函数
router.beforeEach(function(to, from, next) {// to 表示将要访问的路由的信息对象// from 表示将要离开的路由的信息对象// next() 函数表示放行的意思// 分析:// 1. 要拿到用户将要访问的 hash 地址// 2. 判断 hash 地址是否等于 /main。// 2.1 如果等于 /main,证明需要登录之后,才能访问成功// 2.2 如果不等于 /main,则不需要登录,直接放行  next()// 3. 如果访问的地址是 /main。则需要读取 localStorage 中的 token 值// 3.1 如果有 token,则放行// 3.2 如果没有 token,则强制跳转到 /login 登录页if (to.path === '/main') {// 要访问后台主页,需要判断是否有 tokenconst token = localStorage.getItem('token')if (token) {next()} else {// 没有登录,强制跳转到登录页next('/login')}} else {next()}
})export default router

vue-router 的基本使用相关推荐

  1. vue router 入门笔记

    vue router 入门笔记 tips: components优先级大于component,即当一个route对象里同时配置了component和components时component视为无效 即 ...

  2. 你可能不清楚的 Vue Router 深度用法(一)

    Vue Router 简单易上手,能实现大部分的需求.但是,如果在项目里需要更细致的控制路由,以实现与其同步的效果,就需要挖掘其文档里没详细提及的内容.第一章为路由元信息用途挖掘. 路由元信息用途 ( ...

  3. vue router html,vue-router.html

    Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...

  4. Vue.js 从 Vue Router 0.7.x 迁移

    从 Vue Router 0.7.x 迁移 只有 Vue Router 2 是与 Vue 2 相互兼容的,所以如果你更新了 Vue ,你也需要更新 Vue Router .这也是我们在主文档中将迁移路 ...

  5. 你可能不清楚的 Vue Router 深度用法(二)

    此为 Vue Router 深度用法的第二篇,主要讲述动态路由匹配用法.第一篇的链接在此: https://segmentfault.com/a/11... 动态路由匹配是用于把某种模式匹配到的所有路 ...

  6. vue router html后缀,vue-router.html

    Document Hello App! Go to Foo Go to Bar // 1. 定义(路由)组件. // 可以从其他文件 import 进来 const Foo = { template: ...

  7. vue require css html,requirejs vue vue.router简单框架

    index.html 入口页面html> vue `menu`.`name` base.js requirejs 配置文件(function(){    requirejs.config({   ...

  8. Vue Router 4.0 正式发布!焕然一新。

    关注若川视野,回复"pdf" 领取资料,回复"加群",可加群长期交流学习 12月8日,Vue Router 4 正式发布稳定版本. 在经历了 14 个 Alph ...

  9. vue router 参数_Vue.js项目开发技术解析

    Vue.js项目开发技术解析 一.Vue.js实例 在一个Vue.js工程中,用于显示内容最基层的实例称之为根实例.通过该实例可以进行页面或组件的更新和显示.对于项目本身而言,无论是什么样的页面,都要 ...

  10. Vue Router的详细教程

    Vue Router的详细教程 安装 #直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 ...

最新文章

  1. 11467人力资源统计学在计算机,2013年至2017年自考11467《人力资源统计学》真题及答案.pdf...
  2. 设置linearlayout最大高度_技术案例 | 排烟口个数与挡烟垂壁高度的关系探讨
  3. input css年月日,input标签的type为date,显示的日期格式样式更改
  4. springmvc java的验证码的小程序
  5. OpenCV计算机视觉实战(Python版)_004图像形态学处理
  6. android support v4 viewstub,Android 控件ViewStub
  7. 区块链技术与微服务架构之间有什么关系?
  8. oracle管理员的作用,ORACLE数据库管理员的职责
  9. informix 如何下载
  10. 施努卡:什么是视觉定位系统 视觉系统如何定位
  11. 笔记本电脑扩展屏幕到笔记本、平板和手机(duet、spacedesk)
  12. Homebrew国内加速
  13. rio 10.3 vcl应用更换皮肤
  14. springboot+Rabit实战二:(Rabbit MQ web 界面管理)
  15. java重复代码重构_重构重复代码
  16. python中notebook左侧in中_Python Pmw.NoteBook方法代码示例
  17. java监听微信_一种基于java后台应用监控微信小程序的用户访问量的方法与流程...
  18. jupyter notebook书写规范
  19. (导数)微分与积分的概念
  20. ASP.NET控件集合

热门文章

  1. apache属于哪个公司
  2. 在Win7上安装WINDRIVER.TORNADO.V2.2.FOR.PENTIUM与运行HelloWorld
  3. [SDOI2016]生成魔咒
  4. React路上遇到的Bug
  5. 强化学习之三:双臂赌博机(Two-armed Bandit)
  6. android项目引用java项目图解和注意事项
  7. 如何在XSLT里调用C#的代码
  8. 关于 uniqueidentifier
  9. 【原创】如何优化一个网站使之提高访问速度--更新20120216
  10. Struts编程心得