Там нет возможности сделать это прямо сейчас.
Если Вы прослеживать код маршрутизатора самостоятельно начинающуюся от маршрутизатора # Navigate(), Вы можете видеть, что create_url_tree # дерево() функция строит дерево с строковой queryParams:
function tree(oldSegmentGroup, newSegmentGroup, urlTree, queryParams, fragment) {
if (urlTree.root === oldSegmentGroup) {
return new UrlTree(newSegmentGroup, stringify(queryParams), fragment);
}
return new UrlTree(replaceSegment(urlTree.root, oldSegmentGroup, newSegmentGroup), stringify(queryParams), fragment);
}
И stringify() делает все грязная работа:
function stringify(params) {
var /** @type {?} */ res = {};
forEach(params, function (v, k) { return res[k] = "" + v; });
return res;
}
Результат конкатенации строки и массива является запятыми строка.
Существует несколько проблем, связанных с несколькими параметрами запроса с тем же именем, которые были исправлены в https://github.com/angular/angular/pull/11373. Как видите, измененный url_tree # serializeQueryParams() делает именно то, что вам нужно. Но проблема в том, что сериализация происходит намного позже, поскольку дерево будет построено.
Похоже, что это ошибка в create_url_tree # tree() - он не должен строгать параметры запроса, поскольку это область ответственности url_tree # serializeQueryParams(). Я удалил вызов stringify() локально, и все начало работать так, как должно.
Как обходной путь Вы можете связать каждый параметр запроса вручную с помощью JSON.stringify (queryParamArray) перед отправкой его на маршрутизатор # naviagate() и проанализировать его с помощью JSON.parse (param) в route.queryParams.subscribe(). URL выглядит ужасно, но теперь это единственный способ передать массивы.
UPDATE: Я создал этот вопрос в угловом хранилище: https://github.com/angular/angular/issues/14796
Я думаю, что вопрос должен быть; зачем вам нужны ваши параметры в этом формате? Router naviagtion предназначен только для локальной навигации, эта ссылка (с параметрами) никогда не будет на сервере. Вы уверены, что ищете локальную навигацию? Или вы хотите сделать здесь вызов сервера (тогда я могу понять формат массива)? – MikeOne
Да MikeOne, я хочу сделать вызов сервера через службу, чтобы получить некоторые данные json – Antop
Через сервис? Хорошо. Вы переходите сюда по заданному маршруту, который, вероятно, использует компонент. Где служение (вы имеете в виду Угловое служение здесь?)? Я хочу сказать, что если ваш сервер ожидает этот формат GET, вы должны разрешить его в сервисе ia. Вызов маршрутизатора просто направит эти данные на другой компонент, где вам придется снова разобрать его и т. Д. Возможно, я не понимаю, чего вы пытаетесь достичь здесь. – MikeOne