本文介绍: 我们输出一下引入的VueRouter构造函数,会发现在其prototype下的push方法和replace方法。既然push方法是我们引入的vue–router中的方法,那么我们就去找创建$router 的实例对象。但是使用这种方法治标不治本,难道我们每一次调用push和replace都要额外写两个回调函数吗?我们都知道,我们在使用一个Promise对象是时候需要配置成功执行函数和失败回调函数,所以我们只需要在使用push方法的时候额外传入一个成功回到函数和一个失败回调函数即可。
当我们使用编程式路由导航跳转路径时,如果我们两次携带同样的参数进行跳转,会进行页面报错:
那产生这个问题的原因是什么呢?
我们都知道,我们在使用一个Promise对象是时候需要配置成功执行函数和失败回调函数,
所以我们只需要在使用push方法的时候额外传入一个成功回到函数和一个失败回调函数即可。
但是使用这种方法治标不治本,难道我们每一次调用push和replace都要额外写两个回调函数吗?
所以,为了书写便捷,我们可以重写push 方法和replace 方法:
首先我们需要搞清楚push方法在哪儿:
既然push方法是我们引入的vue–router中的方法,那么我们就去找创建$router 的实例对象
我们输出一下引入的VueRouter构造函数,会发现在其prototype下的push方法和replace方法
那么我们就对VueRouter.prototype.push 和 VueRouter.prototype.replace 进行重写。
// 引入router
import VueRouter from "vue-router";
// 保存一份原来的push 和 replace 方法
let originPush = VueRouter.prototype.push;
let originReplace = VueRouter.prototype.replace;
// 重写push方法
// push接受三个参数:配置项、成功回调函数、失败回调函数
VueRouter.prototype.push = function (location, resolve, reject) {
// 如果用户自定义了成功回调函数和失败回调函数
if (resolve && reject) {
// 直接调用原方法,并传递用户配置的回调函数
// 注意这里需要把originPush的指向改为VueRouter
// 使用call方法能够调用函数一次,传递参数使用逗号隔开;apply方法使用数组隔开
originPush.call(this, location, resolve, reject);
} else {
// 如果用户没有自定义回调函数,那么我们手动传入两个空函数
originPush.call(this, location, () => {}, () => {});
}
};
// 重写replace方法
VueRouter.prototype.replace = function (location, resolve, reject) {
if (resolve && reject) {
originReplace.call(this, location, resolve, reject);
} else {
originReplace.call(this, location, () => {}, () => {});
}
}
原文地址:https://blog.csdn.net/XunLin233/article/details/134561944
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_7141.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。