以前,我是通过angular js中的某些服务传递url的。现在,我想将URL作为参数从控制器传递给$ resource。
我试图将url从控制器传递到资源,但是它抛出未找到url对象的错误。
以下是我当前的工厂代码:
angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',
function(Resource, Service, Http) {
return {
testGetPatients : Resource(Service.getPatientsCustomRefURL(), {}, {
query : {
method : 'GET',
isArray : false
}
})
};
}]);
在上面的代码中,我从 Service.getPatientCUstomRefURL
发送url参数对$ resource的实际调用如下所示:
PatientsService.getPatientsRef.query(function(refResponse) {
//TODO for response
});
现在,我想传递Parameter像这样:
PatientsService.getPatientsRef.query("/patient/list",function(refResponse) {
//TODO for response
});
我应该在PatientService工厂中进行哪些更改,以便支持将url作为参数传递。
这是将为$ resource创建url的代码 服务代码
angular.module('Services', ['ngResource']).factory('Service', ['$resource', '$location', '$rootScope',
function($resource, $location, $rootScope) {
return {
getPatientsCustomRefURL: function() {
return '/patient/list';
}
};
}
]);
注意
PatientService中有很多方法,因此我不想为每个$ resource在PatientService中添加额外的功能,这会将url作为参数传递给
angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',
function(Resource, Service, Http) {
return {
testGetPatients : function(url){
return Resource(url, {}, {
query : {
method : 'GET',
isArray : false
}
})
}
};
}]);
答案 0 :(得分:0)
现在,我想传递Parameter像这样:
PatientsService.getPatientsRef.query("/patient/list",function(refResponse) { //TODO for response });
对于这样的API调用,使用$http
服务会更容易:
$http.get("/patient/list").then(function(response) {
var refResponse = response.data;
//TODO for response
});
通过$resource服务更改url的标准方法是在url模板中定义参数:
var service = $resource("/api/:slug/list", {slug: patient}, {
getByID: {
url: "/api/:slug/:id",
method: "GET",
isArray: false,
}
);
示例:
$scope.patients = service.query(); //returns array from
// api/patient/list
$scope.doctors = service.query({slug: doctor}); //returns array from
// api/doctor/list
$scope.patientRecord = service.getById({id: 1234}); //returns object from
// api/patient/1234
$scope.patientRecord = service.get({id:1234}); //returns object from
// api/patient/list?id=1234
参数化的URL模板使用:
前缀的参数/user/:username
。如果您使用带有端口号的URL(例如http://example.com:8080/api
),则会受到尊重。
参数对象中的每个键值都首先绑定到url模板(如果存在),然后将多余的键附加到?
之后的url搜索查询中。
重要的是要意识到调用$ resource对象方法会立即返回空引用(对象或数组取决于isArray
)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常资源会分配给模型,然后由视图呈现。
答案 1 :(得分:0)
对于上述问题,您可以将现有的$ resource包装在某些函数中,并将URL传递给该函数。
angular.module('Services').factory('PatientsService', ['$resource', 'Service', '$http',
function(Resource, Service, Http) {
return {
testGetPatients : function(url){
return Resource(url, {}, {
query : {
method : 'GET',
isArray : false
}
})
}
};
}]);
有意义。