导航钩子

vue-router 提供的导航钩子主要用来拦截导航,让它完成跳转或取消。有多种方式可以在路由导航发生时执行钩子:全局的, 单个路由独享的, 或者组件级的。
全局钩子
你可以使用 router.beforeEach 注册一个全局的 before 钩子:
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
当一个导航触发时,全局的 before 钩子按照创建顺序调用。钩子是异步解析执行,此时导航在所有钩子 resolve 完之前一直处于 等待中。
每个钩子方法接收三个参数:
确保要调用 next 方法,否则钩子就不会被 resolved。
同样可以注册一个全局的 after 钩子,不过它不像 before 钩子那样,after 钩子没有 next 方法,不能改变导航:
router.afterEach(route => {
// ...
})
你可以在路由配置上直接定义 beforeEnter 钩子:
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
这些钩子与全局 before 钩子的方法参数是一样的。
组件内的钩子
最后,你可以在路由组件内直接定义以下路由导航钩子:
beforeRouteEnter
beforeRouteUpdate (2.2 新增)
beforeRouteLeave
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 因为当钩子执行前,组件实例还没被创建
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,但是该组件被复用时调用
// 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
// 可以访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 可以访问组件实例 `this`
}
}
beforeRouteEnter 钩子 不能 访问 this,因为钩子在导航确认前被调用,因此即将登场的新组件还没被创建。
不过,你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。
beforeRouteEnter (to, from, next) {
next(vm => {
// 通过 `vm` 访问组件实例
})
}
路由元信息
你可以 在 beforeRouteLeave 中直接访问 this。这个 leave 钩子通常用来禁止用户在还未保存修改前突然离开。可以通过 next(false) 来取消导航。
定义路由的时候可以配置 meta 字段:
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
children: [
{
path: 'bar',
component: Bar,
// a meta field
meta: { requiresAuth: true }
}
]
}
]
})
那么如何访问这个 meta 字段呢?
首先,我们称呼 routes 配置中的每个路由对象为 路由记录。路由记录可以是嵌套的,因此,当一个路由匹配成功后,他可能匹配多个路由记录
例如,根据上面的路由配置,/foo/bar 这个 URL 将会匹配父路由记录以及子路由记录。
一个路由匹配到的所有路由记录会暴露为 $route 对象(还有在导航钩子中的 route 对象)的 $route.matched 数组。因此,我们需要遍历 $route.matched 来检查路由记录中的 meta 字段。
下面例子展示在全局导航钩子中检查 meta 字段:
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
// this route requires auth, check if logged in
// if not, redirect to login page.
if (!auth.loggedIn()) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next() // 确保一定要调用 next()
}
})
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# VueRouter
# 导航钩子
# vue
# 路由钩子函数
# 路由元信息
# 详解Vue路由钩子及应用场景(小结)
# 在vue中利用全局路由钩子给url统一添加公共参数的例子
# Vue的路由及路由钩子函数的实现
# Vue使用路由钩子拦截器beforeEach和afterEach监听路由
# 基于Vue2.X的路由和钩子函数详解
# vue-router钩子函数实现路由守卫
# Vue2.x与Vue3.x中路由钩子的区别详解
# vue-router之路由钩子函数应用小结
# Vue Router组件内路由钩子的使用
# 你可以
# 回调
# 还没
# 跳转
# 复用
# 就会
# 在这个
# 多个
# 将会
# 遍历
# 举例来说
# 可以通过
# 不像
# 还未
# 让它
# 方法来
# 独享
# 有多种
# 大家多多
# 跳转到
相关文章:
如何选择美橙互联多站合一建站方案?
,怎么在广州志愿者网站注册?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何快速搭建响应式可视化网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何在IIS中配置站点IP、端口及主机头?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
网站制作话术技巧,网站推广做的好怎么话术?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
韩国服务器如何优化跨境访问实现高效连接?
如何自定义建站之星模板颜色并下载新样式?
公司网站制作价格怎么算,公司办个官网需要多少钱?
如何在Windows 2008云服务器安全搭建网站?
北京网站制作公司哪家好一点,北京租房网站有哪些?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
如何做网站制作流程,*游戏网站怎么搭建?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星2.7模板快速切换与批量管理功能操作指南
如何快速打造个性化非模板自助建站?
如何规划企业建站流程的关键步骤?
如何快速登录WAP自助建站平台?
建站之星2.7模板:企业网站建设与h5定制设计专题
如何选择PHP开源工具快速搭建网站?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
制作表格网站有哪些,线上表格怎么弄?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何在阿里云服务器自主搭建网站?
网站制作员失业,怎样查看自己网站的注册者?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何将凡科建站内容保存为本地文件?
红河网站制作公司,红河事业单位身份证如何上传?
如何在VPS电脑上快速搭建网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何通过老薛主机一键快速建站?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站主机如何安装配置?新手必看操作指南
h5在线制作网站电脑版下载,h5网页制作软件?
建站主机与虚拟主机有何区别?如何选择最优方案?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
如何在建站之星绑定自定义域名?
建站之星多图banner生成与模板自定义指南
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
*请认真填写需求信息,我们会在24小时内与您取得联系。