如何使用Querystring代替';'

时间:2016-04-14 19:10:50

标签: angular angular2-routing

我一直在编写一个内部工具,供开发人员使用由C#WebApi支持的Angular2 beta 15。

随着新版本的发布,我升级了Angular2版本

我从第1天开始使用路由,但现在我需要添加可选参数。通常这是通过查询字符串完成的。

但是,Angular2在查询字符串之前包含可选参数,如下所示:

http://www.example.com;a=b;c=4

最初我觉得这很好,即使它不是我习惯的。但是,我现在遇到了需要“潜在危险的Request.Path值[s]”的情况,例如“*”(用于保存预先填充的正则表达式搜索字段的链接)。

我可以想到几个修复,包括:

  1. 替换*的其他符号 - 表示开发人员必须知道特殊符号才能释放网址。
  2. Url对参数进行编码 - 表示开发人员必须知道url编码的值才能免费提供网址。
  3. 当他们有特殊字符时排除这些参数 - 如果开发人员使用*免费提供网址,页面仍会中断。
  4. 从pre-querystring参数切换到querystring参数。
  5. 手动控制查询字符串。
  6. 大多数简单的正则表达式在没有编码的查询字符串中完全有效,这意味着(4)和(5)都是有效的解决方案。

    (5)是可能的,但我无法想象我是唯一遇到过这个问题的人。如果存在官方解决方案,我宁愿不创建自己的解决方法。

    (4)是我的首选解决方案。我发现的许多较旧的示例都在查询字符串中显示了可选参数,因此我希望逻辑仍然存在,并且分号版本只是默认选项。

    是否可以告诉路由器使用查询字符串参数而不是现在使用的分号分隔内容?

    我搜索了angular.io和stackoverflow,找不到任何答案或者有人问这个问题。

    感谢。

2 个答案:

答案 0 :(得分:8)

你可以试试这个:

<a [routerLink]="['/users']" [queryParams]="{q:'ABC', location:2929}">Test</a>

这将为您提供类似http://www.example.com/users?q=ABC&location=2929

的路线

祝你好运。

答案 1 :(得分:2)

对于根路由器,可选参数在查询字符串中表示,对于子路由器,它们被添加为矩阵参数(显示的内容)

另见ROUTING & NAVIGATION