我正在向我的API发出请求,而我正在使用AngularJS $资源模块。它与$ http不同,所以我不知道如何处理我的错误。
我的服务:
var appServices = angular.module('app.services', ['ngResource']);
appServices.factory('Category', ['$resource',
function($resource){
return $resource('/apicategoryerr/?format=:format', {}, {
query: {
method: 'GET',
params: { format: 'json'},
isArray: true,
}
});
}]);
我的控制器:
...
Category.query(function(data) {
console.log(data);
});
...
我想要这样的东西或..如果我的API无效,我不知道如何处理错误..
Category.query().success(function() {
console.log('success');
}).error(function() {
console.log('error');
});
答案 0 :(得分:178)
您可以将错误处理程序作为第二个参数传递给query
。
Category.query(function(data) {}, function() {});
修改强>
让事情更清楚一些,例如:
var Resource = $resource('/restapi/resource');
Resource.query(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
'query': 'thequery'
},function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query().$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});
Resource.query({
'query': 'thequery'
}).$promise.then(function(data) {
// success handler
}, function(error) {
// error handler
});
答案 1 :(得分:68)
您可以在资源的创建步骤中通过在方法描述中添加interceptor
对象来定义错误处理程序,并使用responseError
属性链接到您的错误函数。
function resourceErrorHandler(response) { ... }
$resource('/path/:param/', {} ,
{
'get': {method:'GET',
interceptor : {responseError : resourceErrorHandler}},
'save': {method:'POST'},
'query': {method:'GET', isArray:true,
interceptor : {responseError : resourceErrorHandler}},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'}
};
其中resourceErrorHandler
是在get或query方法上的每个错误上调用的函数。对于提出的问题,get方法是唯一需要的。当然,您可以将其应用于任何行动。
$ resource存在另一个拦截器response
以捕获正常响应。
{'get': {method:'GET', interceptor : {response : resourceResponseHandler}},
拦截器是$http
模块的一部分,您可以进一步read about them in their docs。
答案 2 :(得分:1)
这是我的ng.resource
上新的ES6示例(我使用TypeScript)resolve: {
detail: function (myService, $stateParams) {
return myService.getEventDetail({ id: $stateParams.id }).$promise.then(data => data, error => false );
}
}
然后在我的控制器中,'详细信息'注入控制器将解析数据(好)或错误错误,我处理404的显示。