我遇到了Angular2處理url編碼JSON矩陣參數的問題。我需要創建一個自定義UrlSerializer來處理JSON中字符串字段內的括號。例如:用戶代理字符串。自定義序列化的樣子:Angular2 Url編碼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」]參數樹的路徑產生,我們希望看到反序列化對象:
而路由器參數訂閱按預期觀察這些參數:
然而,在一個矩陣參數(在該示例中爲 'r')是這樣一個URL編碼JSON字符串,我們有:
再次,在root.children.primary.segments [ 「0」]。樹的參數路徑,我們可以看到我們期望填充的對象(注意:括號已正確反序列化,此時字符串是有效的JSON,不是它應該重要,因爲這只是一個簡單的字符串字段):
除了這次,路由參數訂閱觀察一個空對象!
我懷疑的是,內容是由角消毒反序列化後,但我沒能還證實了這一點。有什麼建議麼?
爲什麼不只是使用encodeURIComponent? –
@JuliaPassynkova:編碼在我的代碼和其他各種工具中都是有效的和解碼無問題的。這個問題最終與範圍有關。謝謝你的想法。 – CellularAutomaton
請包括代碼作爲文本,而不是圖像。沒有人會通過使用他們的代碼圖像來搜索類似的問題。 –