我使用AngularJS 1.1.3来使用带有promises的新$资源......
如何从中获得回调? 我尝试的方式与$ http:
相同$resource.get('...').
success(function(data, status) {
alert(data);
}).
error(function(data, status) {
alert((status);
});
但是没有“成功”和“错误”功能......
我也试过了:
$resource.get({ id: 10 },function (data) {
console.log('success, got data: ', data);
}, function (err) {
alert('request failed');
});
即使回报是 404 ,也始终打印“成功,得到数据”......
有什么想法吗?
由于
答案 0 :(得分:49)
从 PR on angulars resource 和角度1.2开始,角度将转换为执行成功/错误检查的更简单方式。 Resource.get(..)和instance.get()都不支持附加回调或$ then方法,而是支持$ promise方法,后者自然会为两者返回一个承诺。
从角度1.2开始,$ promise功能将上线:$promise changes
将“获取”请求更改为这些内容(原始示例位于angularjs.org首页):
factory('Project', function($resource) {
var Project = $resource('https://api.mongolab.com/api/1/databases' +
'/youraccount/collections/projects/:id',
{ apiKey: 'yourAPIKey' }, {
update: { method: 'PUT' }
}
);
Project.prototype.update = function(cb) {
return Project.update({id: this._id.$oid})
.$promise.then(
//success
function( value ){/*Do something with value*/},
//error
function( error ){/*Do something with error*/}
)
};
Project.prototype.destroy = function(cb) {
return Project.remove({id: this._id.$oid})
.$promise.then(
//success
function( value ){/*Do something with value*/},
//error
function( error ){/*Do something with error*/}
)
};
return Project;
});
在控制器中的其他位置,您可以实例化一个资源“Project”实例,您可以在其中使用相同的接口来获取成功和错误:
var myProject = new Project();
myProject.$get({id: 123}).
.$promise.then(
//success
function( value ){/*Do something with value*/},
//error
function( error ){/*Do something with error*/}
)
答案 1 :(得分:29)
var MyResource = $resource("/my-end-point/:action", {}, {
getSomeStuff: { method:"GET", params: { action:"get-some-stuff" }, isArray: true },
getSingleThing: { method:"GET", params: { action:"get-single-thing" }, isArray: false }
});
function MyController(MyResource) {
var itemList = MyResource.getSomeStuff({}, function success() {}, function err() {});
// will call: /my-end-point/get-some-stuff
// will be array. each object is resource's instance
var item = MyResource.getSingleThing({id:123}, function success() {}, function err() {});
// will call: /my-end-point/get-single-thing?id=123
// will be object. an instance of resource
}
另请参阅文档中的示例: ngResource
答案 2 :(得分:0)
两种方式
var resource = $resource("");
resource.$promise.then(function(data){
// do stuff success
}, function(error){
//do stuff error
});
其他方式
var resource = $resource("");
resource({}, function success(data){
//do stuff
}, function error(error){
//do stuff
}