$ resource旨在从端点检索数据,对其进行处理并将其发送回。您已经有了 其中的一些功能 ,但是您并没有真正利用它来完成它。
在您的资源上有自定义方法是很好的,但是您不想错过OOTB附带的很酷的功能。
编辑 :我认为我本来解释得不够好,但是
$resource做了一些带有回报的时髦东西。
Todo.get()和
Todo.query()两个
返回 的资源对象, 并 把它传递到 回调
的GET完成时。它在幕后做了一些花哨的承诺,这意味着您可以
$save()在
get()回调实际触发之前调用,并且它将等待。最好只在promise
then()或callback方法中处理资源。
标准使用
var Todo = $resource('/api/1/todo/:id');//create a todovar todo1 = new Todo();todo1.foo = 'bar';todo1.something = 123;todo1.$save();//get and update a todovar todo2 = Todo.get({id: 123});todo2.foo += '!';todo2.$save();//which is basically the same as...Todo.get({id: 123}, function(todo) { todo.foo += '!'; todo.$save();});//get a list of todosTodo.query(function(todos) { //do something with todos angular.forEach(todos, function(todo) { todo.foo += ' something'; todo.$save(); });});//delete a todoTodo.$delete({id: 123});同样,对于在OP中发布的内容,可以获取一个资源对象,然后在其上调用任何自定义函数(理论上):
var something = src.GetTodo({id: 123});something.foo = 'hi there';something.UpdateTodo();我去之前尝试过OOTB实施,但是发明了自己的。而且,如果您发现自己没有使用的任何默认功能
$resource,则可能应该
$http自己使用。
更新:Angular 1.2和Promises
从Angular 1.2开始,资源支持承诺。但是他们没有改变其余的行为。
要
$resource通过使用诺言,您需要
$promise在返回值上使用属性。
使用承诺的示例
var Todo = $resource('/api/1/todo/:id');Todo.get({id: 123}).$promise.then(function(todo) { // success $scope.todos = todos;}, function(errResponse) { // fail});Todo.query().$promise.then(function(todos) { // success $scope.todos = todos;}, function(errResponse) { // fail});请记住,该
$promise属性是具有与上面返回的值相同的属性。所以你会变得很奇怪:
这些是等效的
var todo = Todo.get({id: 123}, function() { $scope.todo = todo;});Todo.get({id: 123}, function(todo) { $scope.todo = todo;});Todo.get({id: 123}).$promise.then(function(todo) { $scope.todo = todo;});var todo = Todo.get({id: 123});todo.$promise.then(function() { $scope.todo = todo;});


