在Vue项目中为何要重写push和replace
0.前言
为啥要重写push和replace,主要是你不写他会报错啊,为啥会报错呢,主要是因为函数式路由push方法返回的是一个promise对象,我们知道promise对象是有成功回调和失败回调的,但是我们并没有传入相应的回调就会出错。所以需要进行重写
1.重写$router.push
首先把原本的push函数保存下来,接下来重写router.prototype上的push方法,如果外界传入了resolve和rejected回调,那么就用外部传入的,否则就传入一个空函数作为回调,这样就可以避免没有传入回调时的报错。
至于为什么要用call,因为originPush已经被抽取为一个全局函数了,那么如果push被调用的时候如果不显式指定this那么this会指向window而不是vc实例
let originPush = VueRouter.prototype.push;
VueRouter.prototype.push = function(localtion,resolve,rejest)
{
if(resolve&&rejest)
{
originPush.call(this,localtion,resolve,rejest);
}
else
originPush.call(this,localtion,()=>{},()=>{});
}
2.重写$router.replace
和重写push几乎一样的
分类:
JavaScript
, Vue
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix