Итак, у меня есть ресурс REST в этом направлении...
/api/Dogs
/api/Dogs/1
/api/Dogs/2
...
Как выглядит собака...
{
Id: 1,
Url: "http://kennelclub/api/Dogs/1",
Name: "Butch"
}
и второй ресурс вроде так...
/api/Owners
/api/Owners/1
....
Для удобства, чтобы получить собак для владельца, у меня есть этот метод запроса...
/api/Owners/1/Dogs/
Теперь тривиально легко заставить AngularJS $resource
читать собак владельцев, как показано ниже...
var ownersDogs = $resource("/api/Owners/:ownerId/Dogs/:dogId", { dogId: "@Id" });
var ownersDogs.query({ ownerId: 1 });
Наконец, вопрос
Я хочу внести изменения в собаку, полученную по этому URL-адресу, с помощью функции magic angular $save
...
ownersDogs[0].Name = "Barry";
ownersDogs[0].$save();
Однако здесь есть две проблемы...
- этот URL-адрес вспомогательного ресурса доступен только для чтения (т.е. не принимает PUT/POST).
- Даже если бы это было не так, мне нужно повторно поставить
ownerId
в функции$get
/$save
на объектах, чтобы они работали правильно.
Если я хочу отредактировать возвращенную собаку, мне нужно использовать URL-адрес /api/Dogs/1
. Это позволяет читать/записывать и не требует идентификатора владельца. Вы заметите, что этот URL-адрес уже встроен в возвращаемый объект Dog.
Есть ли способ заставить функции $save
, $get
и т. д. возвращаемого объекта автоматически (?) использовать URL-адрес, встроенный в ресурс? Или, по крайней мере, есть ли способ изменить URL-адрес, который будет использовать $save
?
$resource
, на мой взгляд, намного чище. Мне особенно нравится, как он возвращает объект, который будет использоваться немедленно, а затем заполняет объект позже без необходимости каких-либо обратных вызовов. - person Mark   schedule 17.07.2015