[英]Angular2 Url Encoded JSON Matrix Parameters
Angular2處理網址編碼的JSON矩陣參數時遇到問題。 我需要創建一個自定義UrlSerializer,以便處理JSON中字符串字段內的括號。 例如:用戶代理字符串。 自定義序列化器如下所示:
import { Injectable } from '@angular/core';
import { DefaultUrlSerializer, UrlSerializer, UrlTree } from '@angular/router';
@Injectable()
export class CustomUrlSerializer implements UrlSerializer {
constructor(
private defaultUrlSerializer: DefaultUrlSerializer
) {}
parse(url: string): UrlTree {
const defaultTree = this.defaultUrlSerializer.parse(url);
return defaultTree;
}
serialize(tree: UrlTree): string {
// Use the default serializer to create a url.
const defaultSerialization = this.defaultUrlSerializer.serialize(tree);
const parenthesisFix = defaultSerialization
.replace(/\(/g, '%28')
.replace(/\)/g, '%29');
return parenthesisFix;
}
}
如您所見,除了標准序列化(默認情況下,假定括號是特殊字符)之外,括號還將被序列化。 該代碼對於簡單值正確工作。 在這里,兩個矩陣參數(“ comp_id”和“ camp_id”)被解析為URL樹。
檢查樹的root.children.primary.segments [“ 0”]。parameters路徑會產生我們期望看到反序列化的對象:
路由器參數訂閱會按預期觀察到這些參數:
但是 ,如果矩陣參數(在此示例中為“ r”)是經過網址編碼的JSON字符串,則我們可以:
同樣,在樹的root.children.primary.segments [“ 0”]。parameters路徑中,我們可以看到我們期望填充的對象( 注意:括號已正確反序列化,並且該字符串此時是有效的JSON,並不重要,因為這只是一個字符串字段):
除了這次,路由參數訂閱觀察到一個空對象!
我的懷疑是反序列化后Angular正在清理內容,但是我還不能確認這一點。 有什么建議么?
這最終成為范圍/ DI問題。 當我直接從組件(將其推送到服務中)訂閱路由參數時,JSON矩陣參數開始工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.