vue全家桶(2.7)
3.11.1.vue-router中的全局钩子函数
在vue-router中,路由发生变化,我们可以做一些事情,例如:可以决定是否进入导航,可以决定跳转到哪里,官方文档中又叫做导航守卫
首先来看一个全局的钩子函数,官方文档中叫做注册一个全局的前置守卫,使用router.beforeEach方法来实现
router.beforeEach(() => {
console.log('beforeEach执行了....')
})
这里的beforeEach可以理解为在每个导航进入之前挂的一个钩子,会在每个导航进入之前出发,在beforeEach里面就可以做一些事情,例如,阻止进入导航,执行上面的代码,会发现我们点击相应的导航,对应的组件并不能渲染出来了,罪魁祸首就是这个beforeEach

当我们把代码稍作修改
router.beforeEach((to, from, next) => {
console.log('beforeEach执行了....')
next()
})
得到的效果

每个路由钩子函数接收三个参数:
to: Route: 即将要进入的目标 路由对象
from: Route: 当前导航正要离开的路由
next: Function: 一定要调用该方法来 resolve 这个钩子
这里的next是一个函数,如果不调用next方法,就不会进入下一个钩子,我们就可以用它来实现跳转或者取消
在写具体跳转或者取消案例之前,插播一个前置知识点:路由元信息
路由元信息就是给每条路由记录配置一个meta字段,字段配置好后可以在需要的地方拿出来使用
配置示例:
{
path: '/',
components: {
default: Home,
a: HomeSider,
b: HomeMain
},
meta: {
isLogin: true
}
}
我们可以从钩子函数的参数中拿到meta字段值
router.beforeEach((to, from, next) => {
console.log('beforeEach执行了....')
if (to.meta.isLogin) {
next()
} else {
next(false)
}
})
next函数中传入false就表示不进入导航,我们在meta字段中配置了isLogin,在使用的时候通过to.meta.isLogin 取出来做判断,如果值是true就执行next 如果值是false就执行next(false)
next函数内还可以传入一个路由地址,会自动跳到改地址,我可以把上面代码稍作修改
router.beforeEach((to, from, next) => {
console.log('beforeEach执行了....')
if (to.meta.isLogin) {
next()
} else {
next('/login')
}
})
除了在导航进入之前有一个钩子函数,在导航进入之后也有一个钩子函数,叫做afterEach,使用方法和beforeEach类似, 因为afterEach执行时已经进入到导航了,所以没有第三个参数next
router.afterEach((to, from) => {
console.log('afterEach执行了....')
// 判断是否有title字段
if (to.meta.title) {
window.document.title = to.meta.title
} else {
window.document.title = '螺钉课堂'
}
})
3.11.2.vue-router中写到路由记录里的钩子函数
beforeEnter 在进入导航前被调用,需要在路由记录里面配置
{
path: '/course',
component: Course,
meta: {
isLogin: false,
title: '课程|螺钉课堂'
},
beforeEnter (to, from, next) {
console.log('beforeEnter被执行了')
}
},
11.3.vue-router中写在组件内部的钩子函数
1.beforeRouteEnter, 在导航进入前被调用,在这个函数里面不能拿到this,因为即将被渲染的组件还没被创建
beforeRouteEnter (to, from, next) {
console.log('user组件中的beforeRouteEnter执行了')
next()
}
2.beforeRouteUpdate,在当前路由改变,但是该组件被复用时调用,举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。 可以访问组件实例 this
beforeRouteUpdate (to, from, next) {
console.log('user组件中的beforeRouteUpdate执行了')
next()
}
3.beforeRouteLeave,导航离开该组件的对应路由时调用,可以访问组件实例 this
beforeRouteLeave (to, from, next) {
console.log('user组件中的beforeRouteLeave执行了')
next()
}
螺钉课堂视频课程地址:http://edu.nodeing.com
vue全家桶(2.7)的更多相关文章
- 用 Vue 全家桶二次开发 V2EX 社区
一.开发背景 为了全面的熟悉Vue+Vue-router+Vuex+axios技术栈,结合V2EX的开放API开发了这个简洁版的V2EX. 在线预览 (为了实现跨域,直接npm run dev部署的, ...
- Vue全家桶
简介 “简单却不失优雅,小巧而不乏大匠”. Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计. 为什么 ...
- 从零开始系列之vue全家桶(3)安装使用vuex
什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...
- 使用vue全家桶制作博客网站
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...
- 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程
使用vue全家桶制作博客网站 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...
- Vue全家桶介绍
一直不清楚全家桶是什么玩意,上网搜了一下,才知道就是平时项目中使用的几个依赖包,下面分享一下 Vue 全家桶介绍 Vue有著名的全家桶系列,包含了vue-router(http://router.vu ...
- 一个简单的假vue全家桶(vue+vue-router+require)
首先说明我觉得这是一个比较好理解的vue全家桶(虽然是假的),模块化也是用require来做的,而且如果后期有必要压缩我也会用gulp来做 1.依赖个个本地模块,require只是用来载入page,这 ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- Vue全家桶了解一下(待补充)
vue全家桶了解一下 一.vue+vue-router+vuex+axios1.vue:使用vue-cli,生成最基本的vue项目2.vue-router:vue项目中的路由管理插件3.vuex:vu ...
- 升级vue全家桶过程记录
背景 如果你使用了element-ui的el-tabs组件,并且想要单独升级element-ui至2.10.0,你会发现,使用了el-tabs组件的页面只要打开就卡死.原因是element-ui~2. ...
随机推荐
- jchdl - RTL实例 - AndAnd
https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA AndAnd是三输入与门模块,输出为相与的结果. 参考链接 https://github.c ...
- 【JVM】关于OOM的二三事
组织架构 严格来说,StackOverflowError和OutOfMemoryError都属于错误,而不是异常. java.lang.StackOverflowError public class ...
- Java实现 蓝桥杯VIP 算法提高 勾股数
算法提高 勾股数 时间限制:1.0s 内存限制:256.0MB 问题描述 勾股数是一组三个自然数,a < b < c,以这三个数为三角形的三条边能够形成一个直角三角形 输出所有a + b ...
- Java实现 蓝桥杯VIP 算法提高 计算时间
算法提高 计算时间 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个t,将t秒转化为HH:MM:SS的形式,表示HH小时MM分钟SS秒.HH,MM,SS均是两位数,如果小于10用0补到 ...
- Java实现 蓝桥杯 算法提高 歌唱比赛
试题 算法提高 歌唱比赛 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 X市正在进行歌唱比赛,请你写一个程序计算得分. 每名选手从1到N编号,每名选手的综合成绩由以下几个部分组成: ...
- Java实现 洛谷 P1115 最大子段和
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scann ...
- Java实现 洛谷 P1055 ISBN号码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...
- Java实现找零问题
1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < - < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < - ...
- 小菜成长之路,警惕沦为 API 调用侠
小菜(化名)在某互联网公司担任运维工程师,负责公司后台业务的运维保障工作.由于自己编程经验不多,平时有不少工作需要开发协助. 听说 Python 很火,能快速开发一些运维脚本,小菜也加入 Python ...
- Springboot拦截器实现IP黑名单
Springboot拦截器实现IP黑名单 一·业务场景和需要实现的功能 以redis作为IP存储地址实现. 业务场景:针对秒杀活动或者常规电商业务场景等,防止恶意脚本不停的刷接口. 实现功能:写一个拦 ...