在用户更新/创建一些数据后,我们需要向用户显示错误/成功消息可能是一种常见的情况,我们如何在 AngularJS 中实现它?
我想添加回调但找不到解决方案。使用 $http.post().success().error() 有效,但我想知道是否可以使用更高级别的 API $resource 来做到这一点。
或者,我们应该编写指令或使用 $watch()?
提前感谢您的帮助。
问问题
49013 次
2 回答
51
来自Resource类的操作可以传递成功和错误回调,就像较低级别的$http服务一样
- HTTP GET“类”操作:Resource.action([parameters], [success], [error])
- 非 GET “类”操作:Resource.action([parameters], postData, [success], [error])
非获取操作以 . 为前缀$
。
所以你可以这样做
User.get({userId:123}, function(u, getResponseHeaders){
// this is get's success callback
u.abc = true;
u.$save(function(u, putResponseHeaders) {
// This is $save's success callback, invoke notification from here
});
});
编辑:这是以前 plunker 的另一个例子。get 请求将失败,因为它请求一个不存在的 json 文件。将运行错误回调。
someResource.get(function(data){
console.log('success, got data: ', data);
}, function(err){
alert('request failed');
});
于 2012-12-13T04:47:11.977 回答
5
使用最新的 AngularJS 版本,您可以查看$interceptors
.$httpProvider
然后您可以在发送之前或响应之后拦截所有请求。
angular.module('app').config(function($httpProvider){
$httpProvider.interceptors.push(function($q) {
return {
'request': function(config) {
console.log('I will send a request to the server');
return config;
},
'response': function(response) {
// called if HTTP CODE = 2xx
console.log('I got a sucessfull response from server');
return response;
}
'responseError': function(rejection) {
// called if HTTP CODE != 2xx
console.log('I got an error from server');
return $q.reject(rejection);
}
};
});
});
请注意,您必须返回config
或response
使其正常工作。
在 的情况下rejection
,您需要返回延迟拒绝,以便$http.get().error()
在拦截后仍然有效。
于 2015-02-04T21:09:30.587 回答