Gostaria de usar $ resource para chamar meu serviço da web RESTful (no qual ainda estou trabalhando), mas gostaria de descobrir se o meu script AngularJS está correto primeiro.
O DTO todo tem: {id, order, content, done}
:cmd
é para que eu possa ligar api/1/todo/reset
para limpar a tabela de tarefas no banco de dados.
Aqui está o código com o comentário do meu entendimento:
function TodoService($resource) {
var src = $resource('api/1/todo/:id:cmd',
{id: "@id", cmd: "@cmd"}, //parameters default
{
ListTodos: { method: "GET", params: {} },
GetTodo: { method: "GET", params: { id: 0 } },
CreateTodo: { method: "POST", params: { content: "", order: 0, done: false } },
UpdateTodo: { method: "PATCH", params: { /*...*/ } },
DeleteTodo: { method: "DELETE", params: { id: 0 } },
ResetTodos: { method: "GET", params: { cmd: "reset" } },
});
//Usage:
//GET without ID
//it calls -> api/1/todo
src.ListTodos();
//GET with ID
//it calls -> api/1/todo/4
src.GetTodo({ id: 4 });
//POST with content, order, done
//it calls -> api/1/todo
src.CreateTodo({ content: "learn Javascript", order: 1, done: false });
//UPDATE content only
//it calls -> api/1/todo/5
src.UpdateTodo({ id: 5, content: "learn AngularJS" });
//UPDATE done only
//it calls -> api/1/todo/5
src.UpdateTodo({ id: 5, done: true });
//RESET with cmd
//it calls -> api/1/todo/reset
src.ResetTodos();
}
Uma coisa em particular que não tenho certeza é o método PATCH, não quero atualizar tudo, posso atualizar apenas um campo? Estou construindo esse pedaço de código corretamente?
javascript
rest
angularjs
Tom
fonte
fonte
obj.save()
. Você pode fazer o que está tentando fazer com uma implementação básica de $ http.Respostas:
O recurso $ foi criado para recuperar dados de um terminal, manipulá-los e enviá-los de volta. Você tem um pouco disso, mas não está realmente aproveitando o que foi feito para fazer.
É bom ter métodos personalizados em seu recurso, mas você não quer perder os recursos interessantes que acompanham o OOTB.
Edição : Eu não acho que expliquei isso bem o suficiente originalmente, mas
$resource
faz algumas coisas divertidas com retornos.Todo.get()
eTodo.query()
ambos retornam o objeto de recurso e o passam para o retorno de chamada para quando a obtenção for concluída. Ele faz algumas coisas sofisticadas com promessas nos bastidores, o que significa que você pode ligar$save()
antes que oget()
retorno de chamada realmente seja acionado, e vai esperar. Provavelmente, é melhor lidar apenas com seu recurso dentro de uma promessathen()
ou do método de retorno de chamada.Uso padrão
Da mesma forma, no caso do que você postou no OP, você pode obter um objeto de recurso e, em seguida, chamar qualquer uma de suas funções personalizadas (teoricamente):
No entanto, eu experimentava a implementação do OOTB antes de criar o meu. E se você achar que não está usando nenhum dos recursos padrão
$resource
, provavelmente deve estar usando$http
sozinho.Atualização: Angular 1.2 e promessas
A partir do Angular 1.2, os recursos suportam promessas. Mas eles não mudaram o resto do comportamento.
Para aproveitar as promessas
$resource
, você precisa usar a$promise
propriedade no valor retornado.Exemplo usando promessas
Lembre-se de que a
$promise
propriedade é uma propriedade com os mesmos valores que estava retornando acima. Então você pode ficar estranho:Estes são equivalentes
fonte
Todo.get({id: 123});
retorna uma promessa e não um objeto reto?você pode apenas fazer
$scope.todo = Todo.get({ id: 123 })
..get()
e.query()
em um Recurso, retorne um objeto imediatamente e preencha-o com o resultado da promessa posteriormente (para atualizar seu modelo). É não uma promessa típico que é por isso que você precisa para usar um callback ou a propriedade $ promessa se você tem algum código especial que você quer executada após a chamada. Mas não há necessidade de atribuí-lo ao seu escopo em um retorno de chamada se você estiver usando apenas no modelo.fonte