angular - 如何在 Angular 8 中的“[routerLink]”上禁用动态生成的 URL 编码?
问题描述
我有[routerLink]
如下;
<li *ngFor="let item of pageNumbers" class="page-item">
<a
class="page-link"
[routerLink]="getPageUrl(item) | async"
routerLinkActive="active"
>{{ item }}</a
>
</li>
getPageUrl
方法是这样的;
public getPageUrl(pageNumber: number): Observable<string> {
const url: Observable<string> = this.route.url.pipe(
map((segments: UrlSegment[]) => {
let segmentsString = segments.join("/");
let pageUrl = `/${segmentsString}?startIndex=${pageNumber}`;
return pageUrl;
})
);
return url;
}
但在浏览器角度显示如下网址;
http://localhost:3005/documents%3FstartIndex%3D1
想要的:
http://localhost:3005/documents?startIndex=1
我在这里错过了什么吗?我只是将分页直接绑定到 [routerLink],但是会有更多的查询字符串参数(过滤器、排序)进入 URL,这就是我尝试动态生成 URL 的原因。
解决方案
检查RouterLink的文档:
[routerLink]
用于传递 之前的内容?
,称为“参数”。[queryParams]
用于传递 之后的内容?
,称为“查询参数”。
因此,为了解决您的问题,一个可能的解决方案是返回一个对象getPageUrl
而不是一个字符串,该对象将同时具有参数和查询参数:
public getPageUrl(pageNumber: number): Observable<string> {
return this.route.url.pipe(
map((segments: UrlSegment[]) => {
return {params: segments, queryParams: {startIndex: pageNumber};
})
);
}
你像这样使用它:
<a *ngIf="getPageUrl(item) | async as url"
class="page-link"
[routerLink]="url.params"
[queryParams]="url.queryParams">{{ item }}</a
请注意,您不需要使用 加入查询段/
,因为routerLink
也接受一个数组。
推荐阅读
- r - 与 R 中的马氏距离的最近邻匹配
- scala - [ReferenceError]:未定义窗口
- c++ - 对稍有不同的结构的统一视图
- python - 文件已上传时预填充 Flask-WTF FileField
- python - 使用 python 网络抓取无法在此网站上获取表格
- node.js - 我是否需要让我的脚本运行以让 node-cron 执行计划任务?
- r - knitr kable 将单元格文本格式化为有序列表
- java - 为您的类实现父接口与该接口的子接口有什么好处
- java - 在反应中使用 Spring Boot 和 BrowserRouter 时的 Whitelabel 错误页面
- python - Django Signal卡在循环中