0
点赞
收藏
分享

微信扫一扫

vueRouter通过重写replace和push方法在跳转时添加默认参数

young_d807 2024-01-12 阅读 11

let appId = '12345'

let originReplace = VueRouter.prototype.replace;

let originPush = VueRouter.prototype.push;


function makeNewLocation(location) {

 //由于原来的前端书写不规范导致location可能是string

 if (typeof location == 'string') {

   var newLocation = {

     path: location.split('?')[0],

     query: {

       appId: appId

     }

   }

   //如果原来有带了参数也要加上

   if (location.indexOf('?') != -1) {

     var arr = location.split('?')[1].split('&')

     for (var i = 0; i < arr.length; i++) {

       newLocation.query[arr[i].split('=')[0]] = arr[i].split('=')[1]

     }

   }

   location = newLocation

 }

 //原来有query就直接拼上

 if (location.query) {

   if (!location.query.appId) {

     location.query = {

       ...location.query,

       appId: appId

     }

   }

 } else {

   //原来没有query就定义一个

   location.query = {

     appId: appId

   }

 }

 return location

}

VueRouter.prototype.replace = function (location, resolve, reject) {

 location = makeNewLocation(location)

 if (resolve && reject) {

   originReplace.call(this, location, resolve, reject);

 } else {

   originReplace.call(

     this,

     location,

     () => {},

     () => {}

   );

 }

}

VueRouter.prototype.push = function (location, resolve, reject) {

 location = makeNewLocation(location)

 if (resolve && reject) {

   originPush.call(this, location, resolve, reject);

 } else {

   originPush.call(

     this,

     location,

     () => {},

     () => {}

   );

 }

};

举报

相关推荐

0 条评论