// 创建一个包含当前 URL 参数的对象
export const getURLParameters = (url) =>
(url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
(a, v) => (
(a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a
),
{}
);
/**
* 替换地址栏参数
* @param {key,value}
*/
export const replaceRouteQuery = (query, params) => {
let href = window.location.href;
let origin = href.split('?')[0];
const routeObj = Object.assign({}, getURLParameters(href));
for (let key in params) {
routeObj[key] = params[key];
}
let isFirst = true, str = '';
for (let key in routeObj) {
str += `${isFirst ? '?' : '&'}${key}=${routeObj[key]}`;
isFirst = false;
}
href = origin + str;
if (window.history) {
// 支持History API
window.history.replaceState(null, '', href);
}
Object.assign(query, params);
};
// 调用:
replaceRouteQuery($route.query, { 'startDate': '2020-01-01' })
注意: 该方法只替换地址栏参数,不会再历史记录里面产生记录,按浏览器回退按钮会回到上一个界面.
vue动态修改$router参数
于 2018-05-14 17:47:42 首次发布