Javascript 如何将符号(&;)传递给AngularJS资源参数
我有一个角度资源声明如下Javascript 如何将符号(&;)传递给AngularJS资源参数,javascript,angularjs,urlencode,angularjs-resource,Javascript,Angularjs,Urlencode,Angularjs Resource,我有一个角度资源声明如下 angular.module('xpto', ['ngResource']) .factory('XPTO', function ($resource, $location) { var XPTO = $resource($location.protocol() + '://' + $location.host() + ':port' + '/myservice.svc/gerencia?sigla=:sigla', {
angular.module('xpto', ['ngResource'])
.factory('XPTO', function ($resource, $location) {
var XPTO = $resource($location.protocol() + '://' + $location.host() +
':port' + '/myservice.svc/gerencia?sigla=:sigla',
{
port: ':' + $location.port()
}
);
return XPTO;
})
我想调用服务passing一个参数,该参数包含一个符号(&),类似于:
XPTO.query({ sigla: 'abc&d' }, function (gerencias) {
$scope.gerenciasBuscadas = gerencias;
});
然而,AngularJS并没有正确地对&进行编码。它发送“sigla=abc&d”而不是“sigla=abc%26d”,导致我的服务器将“sigla”的查询字符串参数值视为“abc”,而不是“abc&d”
查看angular-resource-1.0.7.js,我看到了以下内容:
/**
* We need our custom method because encodeURIComponent is too aggressive and doesn't follow
* http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
* segments:
* segment = *pchar
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
* pct-encoded = "%" HEXDIG HEXDIG
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
* / "*" / "+" / "," / ";" / "="
*/
function encodeUriSegment(val) {
return encodeUriQuery(val, true).
replace(/%26/gi, '&').
replace(/%3D/gi, '=').
replace(/%2B/gi, '+');
}
因此,在将请求发送到服务器之前,它将对“&”进行编码并对其进行解码。在将url发送到服务器之前,我是否可以自定义url?更改EncodeUriegment是一个选项,但它可能会破坏Angular中的其他内容。有什么想法吗?这是AngularJS的一篇文章
我发布了一个修复此问题的请求。您可以帮助我将其合并,并对拉请求本身进行注释