Как предотвратить отключение параметров URL-адреса Angular после знака вопроса?

#angular #parameters #router

Вопрос:

учитывая URL-адрес, например http://www.example.com?a=?amp;b=2 Угловой отсекает URL-адрес на втором вопросительном знаке, хотя в соответствии с определением RFC там разрешен вопросительный знак.

К сожалению, у меня нет возможности закодировать URL-адрес вопросительным знаком или изменить URL-адрес каким-либо другим способом.

Ребята, вы знаете, как изменить это поведение и сохранить весь URL-адрес?

Любая помощь будет высоко оценена.

С наилучшими пожеланиями, Пол

Ответ №1:

Если вы посмотрите на Router конструктор в документах, он вводит UrlSerializer , который позже используется для сериализации / десериализации маршрутов. По умолчанию Angular вводит значение DefaultUrlSerializer , которое кодирует параметры запроса.

Но вы можете внедрить свою собственную реализацию, указав ее в поставщиках вашего модуля:

 providers: [{ provide: UrlSerializer, useClass: YourCustomUrlSerializer }],
 

Конечно, вам придется предоставить эту пользовательскую реализацию самостоятельно. Интерфейс довольно прост, поэтому он будет выглядеть примерно так:

 export class YourCustomUrlSerializer implements UrlSerializer {
    parse(url: any): UrlTree {
        // Your implementation here
    }

    serialize(tree: UrlTree): any {
        // Your implementation here
    }
}
 

К сожалению, логика довольно сложная, поэтому это не так просто, как написать несколько строк кода. Вы можете проверить реализацию по умолчанию здесь и опираться на нее.

Комментарии:

1. Это сработало, миллион благодарностей! Привет из Берлина