Vue-Router 路由与配置
现在的很多应用都流行SPA应用(singe page application) 。
传统的项目大多使用多页面结构,需要切换内容的时候我们往往会进行单个html文件的跳转,这个时候因受到网络、性能的影响,浏览器会出现不定时间的空白界面,用户体验不好。
而单页应用则是用户通过某些操作更改地址栏url之后,动态的进行不同模板内容的无刷新切换,用户体验好。
而在vue2.0版本后,vue官方推出vue-router插件来实现单页面的路由跳转,内部原理就是通过组件之间的切换(组件的卸载与安装)去实现整个页面无刷新的效果。
一.项目引入路由并配置:
1.在vue项目中,通过cnpm或者yarn的方式进行vue-router的安装
cnpm i vue-router -S
yarn add vue-router -S

2.接下来需要在入口文件main.js里面进行路由的引入与注册
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)

3. 创建router路由器
new Router({
routes:[
{path:"",component:}
]
})

4. 创建路由表并配置在路由器中
var routes = [
//path为路径,component为路径对应的路由组件
{path,component}
]
new Router({
routes
})

5. 在根实例里注入router,目的是为了让所有的组件里都能通过this.$router、this.$route来使用路由的相关功能api
new Vue({
el: '#app',
router,
template: '<App/>',
components: { App }
})

6. 利用router-view来指定路由切换的位置
7. 使用router-link来创建切换的工具,会渲染成a标签,添加to属性来设置要更改的path信息,且会根据当前路由的变化为a标签添加对应的 router-link-active/router-link-exact-active(完全匹配成功)类名
<router-link to="main">main</router-link>
<router-link to="news">news</router-link>
.router-link-active{
color:red;
}

二.项目中多级路由配置:
1. 在创建路由表的时候,可以为每一个路由对象创建children属性,值为数组,在这个里面又可以配置一些路由对象来使用多级路由,注意:只在一级路由的path前加 '/ '
const routes = [
{path:'/home,component:Home},
{path:'/list',component:List,children:[
{path:'inner',component:Inner},
{path:'outer',component:Outer}
]},
]

2. 二级路由组件的切换位置依然由router-view来指定(指定在父级路由组件的模板中)
<router-link to='/home/inner'>inner</router-link>
<router-link to='/home/outer'>outer</router-link>
<router-view></router-view>

但是这样发现当路由路径多级的时候,不利于快速定位路由匹配的组件。所以,可以通过命名路由的方式去实现以上代码。
我们可以给路由对象配置name属性,当我们在跳转的时候直接写name:inner就会快速的找到此name属性所对应的路由,不需要写大量的urlpath路径了。如下所示:
{path:'inner',component:Inner,name:'inner'}

这样的话,我们就可以方便的根据路由的不同进行组件之间的映射。但是,做大型项目开发的时候,我们也会发现很多的路由写在routes这个里面,会让router这个文件变得很大不利于维护管理。除此之外,如果通过这样的方式还会导致当用户打开首页的话,因为webpack打包的时候,加载内容异常的多导致打开速度很慢。所以我们需要对我们的路由采取懒加载的方式进行引入:
const routes = [
homeRouter
]
//homeRouter.js文件里面
export defult {
Name:’homeRouter’,
Path:’/home’
component:() => import('./my-async-component')}
}

三.Vue-Router的路由守卫:
在项目开发中,我们经常会在路由跳转前后做一些操作。例如我们可以通过利用vue-router里面提供的路由守卫结合axios拦截器实现项目的登录拦截等操作。Vue-router里面提供的路由守卫可以分为三大类,分别是全局路由守卫、单个的路由钩子的路由守卫、路由组件内部的路由守卫。好,我们依次来看:
1. 通过 router.beforeEach 或者router.afterEach注册一个全局守卫:
1-1
router.beforeEach((to, from, next) => {
//会在任意路由跳转前执行,next一定要记着执行,不然路由不能跳转了
next()
})
守卫方法需要接受三个参数:to、from、next
to:即将要进入的目标对象
From:当前导航正要离开的路由
Next: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。
1-2
//会在任意路由跳转后执行
Router.afterEach((to,from)=>{
})

2. 单个路由钩子守卫:
只有beforeEnter,在进入前执行,to参数就是当前路由
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// next也是必须要写的
}
}
]

3. 路由组件钩子守卫:
beforeRouteEnter (to, from, next) {
//内部不能调用this 当这个路由调用时,组件没有被初始化
},
beforeRouteUpdate (to, from, next) {
// 内部可以访问组件实例 `this`
//路由内部动态参数改变了,组件被复用的时候调用(/list/1跳入/list/2,详情组件复用的时候)
},
beforeRouteLeave (to, from, next) {
// 可以访问组件实例 `this` 路由离开这个组件的时候进入
}

以上就是Vue-Router里面的核心技术点,需要在项目中不断的练习、具体到业务逻辑中使用才能更好的理解、渗透,其次多加记忆、巩固才可更加清晰。
Vue-Router 路由与配置的更多相关文章
- 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI
一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...
- Vue系列:Vue Router 路由梳理
Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数. ...
- 04 Vue Router路由管理器
路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...
- Vue Router路由管理器介绍
参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...
- Vue Router 路由守卫:完整的导航解析流程
完整的导航解析流程 1 导航被触发. 2 在失活的组件里调用离开守卫. 3 调用全局的 beforeEach 守卫. 4 在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+). ...
- Vue Router路由守卫妙用:异步获取数据成功后再进行路由跳转并传递数据,失败则不进行跳转
问题引入 试想这样一个业务场景: 在用户输入数据,点击提交按钮后,这时发起了ajax请求,如果请求成功, 则跳转到详情页面并展示详情数据,失败则不跳转到详情页面,只是在当前页面给出错误消息. 难点所在 ...
- Vue Router 路由实现原理
一.概念 通过改变 URL,在不重新请求页面的情况下,更新页面视图. 二.实现方式 更新视图但不重新请求页面,是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有2种方式: 1.Hash ...
- vue 模块化 路由拆分配置
一.普通路由配置 通常我们编写vue路由配置都会写在 /src/router/index.js 这个文件下.但是,随着我们的vue项目变得越来越大后,路由也随之变得越来越多,出现的问题就是我们所有的路 ...
- Vue - Router 路由
路由的注册 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- vue router路由(三)
当环境搭建及Vue语法与指令都有所了解,该说下router. build目录是打包配置文件 (不建议动) config是vue项目基本配置文件 dist是构建后文件 js 手动创建 (根据需要) no ...
随机推荐
- ProcessLassoLauncher.exe
html, body { font-size: 15px } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, &q ...
- 【STM32】NVIC嵌套中断向量控制器与外部中断
两种优先级 抢占优先级PreemptPriority:中断服务函数正在执行时,抢占优先级高的可以打断抢占优先级低的,实现中断的嵌套,相当于51的"高优先级" 响应优先级(子优先级) ...
- python 操作MongoDB pymongo
python操作MongoDB 1.安装pymongo pip install pymongo 2.连接数据库 启动mongodb服务: 包含mongod.exe文件夹bin :shift+鼠标右键, ...
- mysql之数据类型-第三篇
mysql数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据.mysql的数据类型分别有整数,浮点数和定点数类型,日期和时间类型,字符串类型和二进制类型等. 整数类型 数值型数据类 ...
- react实现转盘动画
转盘动画方法如下: /** * 点击转动转盘 */ const turnCircle = () => { let runDeg = +(Math.random() * 360).toFixed( ...
- 字符串转换为Base64,作为token 传入到后台
一.Base64 转换的方法 function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabc ...
- opencv3 7.3 重映射 仿射变换
重映射的概念 将一幅图像某位置的像素放置到另外一幅图像的指定位置上,需要对非整数像素坐标重映射来表达每个像素的新位置. g(x,y)=f(h(x,y)); 实现重映射 remap()函数 dst(x, ...
- JS笔记(四):面向对象、异常处理
镇楼图 Pixiv:torino 六.JS中的面向对象 类(class) 博主视为你已拥有相关基础,这里不再赘述相关概念 类的语法如下,class在本质上是function,可以说class只是针对构 ...
- SpringBoot - Lombok使用详解5(@log、@Buinder、@SneakyThrows、@Synchronized)
七.Lombok注解详解(5) 12,@log (1)该注解用在类上,可以省去从日志工厂生成日志对象这一步,直接进行日志记录,具体注解根据日志工具的不同而不同.不同的日志注解总结如下(上面是注解,下面 ...
- jsp第6个作业—jdbc
UsersDao.java package a; import java.sql.Connection; import java.sql.PreparedStatement; import java. ...