钩子函数
1、全局的钩子
beforeEach(to,form,next)
afterEach(to,form,next)
2、组件内的导航钩子
组件内的导航勾走i主要有这三种:beforeRouterEnter、beforeRouterUpdate、beforeRouteLeave,它们是直接在路由组件内部直接进行定义的
methods: {},
beforeRouteLeave (to, from, next) {}
(需要注意的是,beforeRouteEnter 不能获取组件实例 this,因为当守卫执行前,组件实例还没有被创建,剩下的两个钩子则可以正常获取组件实例this)
beforeRouteEnter获取到this实例
beforeRouteEnter (to, from, next) { next(vm => { // 通过 `vm` 访问组件实例 }) }
相关概念:
1、导航
2、守卫
...
const router = new Router({
mode: "hash",
base: process.env.BASE_URL,
routes: [
{
path: "/",
redirect: "index"
},
// 首页
{
path: "/index",
name: "Index",
component: () => import("@/views/Index/Index.vue"),
meta: {
showBaseTabbar: true,
needLogin: false,
requireAuth: true,
name: "首页"
}
},
{
path: "/login/loginDeny",
name: "logindeny",
component: () => import("@/views/Index/LoginDeny.vue"),
meta: {
showBaseTabbar: true,
needLogin: false,
name: "登录失败"
}
},
....
{
path: "/batchProvideCoupon",
name: "BatchProvideCoupon",
component: () =>
import("@/views/BatchProvideCoupon/BatchProvideCoupon.vue"),
meta: {
showBaseTabbar: false,
needLogin: false,
requireAuth: false,
name: "xxx"
}
}
// 判断是否有 openID router.beforeEach((to, from, next) => { if (to.matched.some(res => res.meta.requireAuth)) { // 判断是否需要登录权限 if (window.localStorage.getItem('openID')) { next(); } else { next({ path: "/login/loginDeny" }); } } else { next(); } });
‘Maximum call stack size exceeded’ 解决
错误的字面意思是:超出最大调用堆栈大小。
这种错误的产生情况可能是router里面路径未声明,变量未定义,递归函数产生死循环。
在这次开发项目的过程中,我出现了这么情况,原因是判断没有openID时,跳入登录失败页面,登录页面又需要登陆权限,没有openID时又进入登陆失败页面,进入死循环。
未完,待续......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端