angularjs – angular-resource.js encodeUriSegment Issue

当资源uri有多个子路径时,我有一个问题是查询restful资源:

示例:

.factory('SomeFactory', function ($resource) {
return $resource('/path/subPath/otherSubPath/:id', {}, {
show: { method: 'GET', params: { id: '@id' } }
})
}) ;

当我在控制器中调用SomeFactory.show时,我得到了错误
服务器响应状态为400(错误请求)
这是因为浏览器正在寻找uri:

http://server/path/subPath%2FotherSubPat/id

注意/替换uri中的/(斜杠),我在javascript中尝试了很多技巧来完成这项工作;但唯一的解决方案是添加以下最后一行替换(/// gi,’/’);在angular-resource.js encodeUriSegment方法中.

请告诉我这种方法是否正确.

function encodeUriSegment(val) {
  return encodeUriQuery(val, true).
    replace(/%26/gi, '&').
    replace(/%3D/gi, '=').
    replace(/%2B/gi, '+').
    replace(/%2F/gi, '/');
}

谢谢 .

最佳答案 好像你已经碰到了在github上打开的这个问题:

https://github.com/angular/angular.js/issues/1388#issue-6979382

建议你采取的方法.就我而言,因为我和你有同样的问题,我更喜欢有多个服务(每个子路径一个)而不是修改angular-resource.js – 我更喜欢不修改核心lib文件,因为任何更新都会擦除那些变化.

希望将有关uri编码的标志添加到Angular中以解决此问题.

点赞