簡體   English   中英

Angular2網址編碼的JSON矩陣參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM