这是我的路线
const routes: Routes = [{ path: 'file-view/:file_name', component: FileViewComponent },];
我的模板
<div *ngFor="let el of mapElement['fileItems']| filter:term">
<a href="file-view/{{el['fileName']}}">
<p>{{el['fileName'] }} ({{el['number']}})</p>
</a>
</div>
这是为了获取file_name的值
ngOnInit(): void {
this.fileName = this.route.snapshot.paramMap.get('file_name');
}
当我尝试访问端点“http://localhost:4200/file-view/?模板锚标记中的“CSTARTUP%20(cstartup.r87)”
在这里,如果file_name参数有任何特殊字符,它将无法捕获它。它适用于简单的字符串,比如“cstartup.r87”,但我试图得到这样的东西“?CSTARTUP(cstartup.r87)”,并且失败。我怎么能把整个画成一个字符串呢?
3条答案
按热度按时间jucafojl1#
首先:在路由名称中使用特殊字符是非常不好的做法。因此,如果您需要特殊字符,请使用查询参数作为示例。在这里你可以阅读所有关于html uri模式的内容。
你的问题是问号。为什么?在标准的html路径中,问号(?)告诉浏览器:* 这里有一个查询参数 *。所以Angular(或者纯JS)不能处理它。
如果你需要问号,让Angular用Router来做。所以不要在
<a></a>
中使用 href。试试这个:在
.ts
中,您可以使用router.navigate([....])
并像这样设置查询参数:krcsximq2#
这相当于将uri编码为程序可以读取的内容,如果您不依赖现成的代码,则在发送文本时应始终使用
encodeURIComponent()
和decodeURIComponent()
。dwbf0jvd3#
我通过使用这个函数对fileName进行编码找到了答案。
参考