gpt4 book ai didi

javascript - 尝试替换 $location.search 时如何避免转义?

转载 作者:行者123 更新时间:2023-12-03 05:53:21 25 4
gpt4 key购买 nike

 const createParam = (key, value) => '?'+key+'='+value;

const rebuildUrl = (linkUrl, params) => {
TagsFactory.resetTickerTags();

console.log('params', params);
_.each(params, (param)=> {
linkUrl += createParam(param.key, param.value);
});

console.log('linkUrl', linkUrl);
// window.location.href = linkUrl;
$location.search(linkUrl);
};

const checkForStoredLink = () => {
Util.notEmpty(storedLinkParams) ? rebuildUrl('', storedLinkParams) : null;
};
<小时/>
storedLinkParams = [
{ key: "ticker",
value: "AAPL" },
// etc...

上面的函数将接受 params 数组并生成一个如下所示的字符串:/dashboard?ticker=AAPL?sort=trend?timespan=day?term_id_1=3010695?start_epoch=1473186060?end_epoch=1473358860

我当前的网址如下所示:

http://localhost/static/dashboard/app/#/dashboard?

一旦我上面的函数到达 $location.search 行,它最终看起来像这样,这破坏了 UI:

http://localhost/static/dashboard/app/#/dashboard?%3Fticker=AAPL%3Fsort%3Dtrend%3Ftimespan%3Dday%3Fterm_id_1%3D3010695%3Fstart_epoch%3D1473186060%3Fend_epoch%3D1473358860

最佳答案

$location.search 期望搜索参数由 & 分隔。例如

$location.search('param1=value1&param2=value2'); 结果:?param1=value1&param2=value2

$location.search('?param1=value1?param2=value2') 结果为:?%3Fparam1=value1%3Fparam2

如果您开始使用 & 来分隔参数,那么您的生活会变得更加简单,您可以传入一个对象并避免任何字符串构建:

$location.search(_.fromPairs(_.map(params, x => [x.key, x.value])));

JsFiddle Example

上面的代码假设 _ 是 lodash.js 的最新版本,如果不是:

_.each(params, x => $location.search(x.key, x.value));

JsFiddle Example

回答标题中的问题:如果您确实想自己设置原始网址,那么解决方案可能是在 window.location 周围注入(inject)您自己的包装器>,但不推荐

关于javascript - 尝试替换 $location.search 时如何避免转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40051383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com