#javascript #angularjs #url #params
#javascript #angularjs #url-адрес #параметры
Вопрос:
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...
Моя функция выше примет массив параметров и сгенерирует строку, подобную этой:
/dashboard?ticker=AAPL?sort=trend?timespan=day?term_id_1=3010695?start_epoch=1473186060?end_epoch=1473358860
Мой текущий URL выглядит так:
http://localhost/static/dashboard/app/#/dashboard?
И как только моя функция выше достигает $location.search
строки, она выглядит так, что нарушает пользовательский интерфейс:
http://localhost/static/dashboard/app/#/dashboard??ticker=AAPL?sort=trend?timespan=day?term_id_1=3010695?start_epoch=1473186060?end_epoch=1473358860
Комментарии:
1. почему бы не разграничить параметры с
amp;
помощью? Если вы используетеamp;
, вы можете передать.search
объект, а не создавать строку самостоятельно2.
const createParam = (key, value) => '?' key.trim() '=' value.trim();
3. @MatthewMcveigh о, так
$location.search
он ищет объект?4. @gr3g спасибо, но
trim
ничего не сделал, строка, котораяlinkUrl
становится, уже чистая. Это то, чем я хочу заменить поиск.5. @LeonGaban он также может принимать строку, но ожидает, что параметры будут разделены
amp;
Ответ №1:
$location.search
ожидается, что параметры поиска будут разделены amp;
. например
$location.search('param1=value1amp;param2=value2');
результаты в: ?param1=value1amp;param2=value2
$location.search('?param1=value1?param2=value2')
результаты: ??param1=value1?param2
.
Если вы начнете использовать amp;
для разграничения параметров, ваша жизнь может быть еще проще, вы можете передать объект и избежать любого построения строки:
$location.search(_.fromPairs(_.map(params, x => [x.key, x.value])));
Приведенный выше код предполагает _
, что это последняя версия lodash.js , если нет:
_.each(params, x => $location.search(x.key, x.value));
Чтобы ответить на вопрос в названии: если вы действительно хотите самостоятельно устанавливать необработанные URL-адреса, решением этого может быть внедрение вашей собственной оболочки window.location
, но я бы не рекомендовал
Комментарии:
1. Спасибо, но, черт
_.fromPairs
возьми, мой URL-адрес не обновляется: (также теперь мой _.each обновляет только первый параметр. Хм, не уверен, что произошло…2. @LeonGaban Извините
fromPairs
, пример был неправильным, будет обновлен. Вот еще одно альтернативное решение . Добавлены некоторые скрипты к ответу — надеюсь, это поможет