我是angularjs的新手,我创建了一个小的ui应用程序来可视化数据。我读到最好让控制器保持干净并将所有服务器调用放入单独的服务中。所以我决定使用自定义工厂和$ resource创建这样的服务。
据我所知,我可以在$ resource中填充一些字段。所以我写了这样的代码
app.factory("serviceCallService", ['$resource', function($resource){
return $resource('http://:url', null, {
getProfiles: {method:'GET',headers :{ //some headers}}
});
}])
在我的控制器中我使用了这样的东西
serviceCallService.getProfiles({' URL':$ scope.currentUrl})
但是在控制台中我看到$ resource因错误而失败,因为它尝试使用这样的URL http://:url
可能有人可以建议我一些解决方案
P.S。 目前我无法访问我的工作机器。一旦我获得访问权限,我将添加一些屏幕截图和控制台日志
答案 0 :(得分:1)
如果您使用' /' (参数斜杠),请求将失败(错误请求)。但是,您还可以找到here
的解决方法从git解决方法:
// In angular-resource.js and method encodeUriSegment
function encodeUriSegment(val) {
return encodeUriQuery(val, true).
replace(/%26/gi, '&').
replace(/%3D/gi, '=').
replace(/%2B/gi, '+').
replace(/%2F/gi, '/'); // <--- Add this line
}
我尝试了这个解决方案,但它确实有效。
这是我的查询功能:
this.queryItem = function (){
var url = "http://serverURL/items";
var deferred = $q.defer();
setTimeout(function() {
var items = Deviation.query({ url: url },function() {
deferred.resolve(results);
}, function(error){
deferred.reject(error);
});
}, 1000);
return deferred.promise;
};
在$ resource factory中:
query: {
method: 'GET',
headers: { "Accept": "application/json; odata=verbose" },
url: ":url"
},
如您所见,我在query
函数中使用另一个url(仅使用参数)覆盖$ resource url。
答案 1 :(得分:0)
提案:
app.factory("serviceCallService", ['$resource', function($resource){
getProfiles: function(url){
return $resource(url, null, {
getProfiles: {method:'GET',headers :{ //some headers}}
}
});
}])
使用serviceCallService.getProfiles($scope.currentUrl)