有没有可能现在这样做的权利。
如果您跟踪路由器代码,自己从路由器#导航()开始时,你可以看到,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);
}
和字符串化()执行所有肮脏的工作:
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#树中的bug() - 它不应该字符串化查询参数,因为它是url_tree#serializeQueryParams的责任()的区域。我已经删除调用字符串化()在本地和一切开始工作,因为它应该。
由于变通方法,您可以将其发送到路由器#naviagate(),并用JSON.parse(PARAM)在route.queryParams.subscribe()解析它之前JSON.stringify(queryParamArray)手动字符串化每个查询参数。 URL看起来很可怕,但现在它是传递数组的唯一方法。
更新:我创造了角库中的问题:https://github.com/angular/angular/issues/14796
我认为这个问题应是;你为什么想要这种格式的参数?路由器naviagtion仅用于本地导航,此链接(带参数)永远不会在服务器上结束。你确定你正在寻找本地导航?或者你想在这里做一个服务器调用(然后我可以理解数组格式)? – MikeOne
是的MikeOne,我想通过服务来调用服务器以检索一些json数据 – Antop
通过服务?好的。您正在此处导航到可能使用组件的设置路线。服务(你的意思是在这里的Angular服务?)在哪里发生?我的意思是,如果你的服务器期望这种GET格式,你应该在服务中解决。路由器调用会将这些数据路由到另一个组件,在那里你将不得不再次分析它等等。也许我不明白你想在这里实现什么...... – MikeOne