UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

79 lines (75 loc) 3.19 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); /** * 根据传入的参数,移除原来的所有参数,根据传入的 keepParamsObj 进行重新拼接地址,以 hash 模式返回 * @param {string} url 地址 * @param {object} keepParamsObj 参数对象 * @returns 只有传入参数的地址 * @example * // 地址是 hash 模式参数 * formatUrlParams('http://www.test.com/#/detail?a=1&b=2&c=3', { d: 4 }); * // => 'http://www.test.com/#/detail?d=4' * @example * // 地址 history 模式参数并存(默认仍以 hash 模式返回) * formatUrlParams('http://www.test.com?a=1&b=2&c=3', { d: 4 }); * // => 'http://www.test.com/?d=4' * @example * // hash 模式和 history 模式参数并存 * formatUrlParams('http://www.test.com?a=1&b=2&c=3#/detail?d=4', { e: 5 }); * // => 'http://www.test.com/#/detail?e=5' * @example * // 地址是 hash 模式和 history 模式参数并存,且是多个参数 * formatUrlParams('http://www.test.com?d=4&f=6#/detail?a=1&b=2&c=3', { e: 5, g: 7 }); * // => 'http://www.test.com/#/detail?e=5&g=7' * @example * // 子工程是 history 模式(forceHistoryMode = true) * formatUrlParams('http://www.test.com?a=1&b=2&c=3', { d: 4 }, true); * // => 'http://www.test.com/?d=4' */ function formatUrlParams() { var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var keepParamsObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var forceHistoryMode = arguments.length > 2 ? arguments[2] : undefined; // 参数校验 var keepKeyArr = Object.keys(keepParamsObj); if (!url) { return url; } // 转换地址参数为字符串 var paramsStr = keepKeyArr.reduce(function (str, key) { var value = keepParamsObj[key]; var item = "".concat(key, "=").concat(value); if (str !== '') { return "".concat(str, "&").concat(item); } return item; }, ''); // 通过 HTMLAnchorElement 规范链接格式 var anchorElement = document.createElement('a') || {}; anchorElement.href = url; var _anchorElement$origin = anchorElement.origin, origin = _anchorElement$origin === void 0 ? '' : _anchorElement$origin, _anchorElement$pathna = anchorElement.pathname, pathname = _anchorElement$pathna === void 0 ? '' : _anchorElement$pathna, _anchorElement$hash = anchorElement.hash, hash = _anchorElement$hash === void 0 ? '' : _anchorElement$hash; if (!origin) { return url; } // 获取 router 的目标 path var matchRes = hash.match(/^#([^?]*)/); var routeName = matchRes === null || matchRes === void 0 ? void 0 : matchRes[1]; // 重新拼接链接,判断采用 history 或 hash 模式返回 var routerPath = ''; // hash 模式拼上 if (!forceHistoryMode) { var isHistory = url.includes('?') && !url.includes('#'); // forceHistoryMode未传的history模式,默认加上hash if (!(forceHistoryMode !== false && isHistory)) { routerPath = "#".concat(routeName || '/'); } } var formatUrl = "".concat(origin).concat(pathname).concat(routerPath, "?").concat(paramsStr); return formatUrl; } exports.formatUrlParams = formatUrlParams;