В моем приложении Angular у меня есть служба, которая использует $http
для извлечения данных с сервера. Конечная точка сервера использует HMAC-аутентификацию и ожидает, что параметры строки запроса будут в определенном порядке по URL-адресу.
Angular sorts the $http
parameters when it builds the URL, поэтому не представляется возможным указать заказ пользовательских параметров.
Вот пример:
this.apiCall = function() {
return $http({
method: 'GET',
url: 'http://example.com/url/v1/endpoint',
params: {
'c': 'cdata',
'a': 'adata',
'b': 'bdata'
}
});
};
Угловая построит URL в http://example.com/url/v1/endpoint?a=adata&b=bdata&c=cdata
, но мне нужно, чтобы сохранить порядок Params, как указано, http://example.com/url/v1/endpoint?c=cdata&a=adata&b=bdata
.
Я понимаю, что могу просто привязать параметры к строке URL вручную, но это не очень удобно, и это не позволяет легко управлять перехватчиками $http
.
Угловой, вероятно, сортирует параметры для обеспечения единообразного поведения в реализациях браузера, поскольку в ECMAScript не указывается порядок объектов.
Независимо от того, Кто-нибудь знает, как обойти по умолчанию Угловое поведение сортировки параметров, чтобы создать URL-адрес, который сохраняет указанные параметры?
Кажется, вы уже ответили на свой вопрос. Если посмотреть на связанный исходный код, очевидно, что единственный способ обеспечить соблюдение порядка параметров - это построить строку запроса самостоятельно и предоставить ее как часть URL-адреса. Вы можете создать декоратор для конфигурации '$ http', создавая конфигурацию при встрече с некоторым специальным синтаксисом' params'. – hon2a
@ hon2a Да, я закончил тем, что создал декоратор для создания URL-адреса. –