В 5 общие методы get
, save
, query
, remove
и delete
доступны в $resource
класса, который может быть вызван непосредственно над House
класса.
Хотя save
, remove
и delete
методы могут быть доступны с $
префиксом на экземпляре класса House
/ресурс, который позволяет нам легко выполнить операцию CRUD на любом экземпляре.
Сравните это с Java методом т.е. все 5 способов без $
статические методы в Java в то время как все 3 (save
, remove
и delete
) с $
префиксом являются метод уровня экземпляра.
Рассмотрим пример:
// Define a class/resource
var House = $resource('/house/:uuid', {});
// Get an instance
var houseInstance = Hourse.get({uuid: "xyz"});
// Delete the instance on any event like click using the `$` prefix (which works directly on the instance)
houseInstance.$delete()
// Or delete that instance using the class:
House.delete({uuid: houseInstance.uuid});
Аналогично для других методов, таких как save
и remove
. Я не уверен, будет ли доступен метод $get
, потому что это действительно не нужно. Если вы думаете в архитектуре MVC, зачем вам нужен метод экземпляра для получения одной записи над экземпляром.
Кроме того, вы можете определить свой собственный экземпляр и (статические) методы уровня класса:
var House = $resource('/house/:uuid', {}, {
foo: {
method: "POST",
url: "/house/show/:uuid"
},
update: {
method: "PUT"
}
});
Теперь вы можете позвонить:
House.foo({uuid: "xyz"}, {houseNumber: "1234"});
// Or you can write this:
var house = new House();
house.uuid = "xyz";
house.houseNumber = "1234";
house.$foo();
// Or any custom method
house.$update();
Вы можете использовать любой из подход т (класс или действие уровня экземпляра), но я рекомендую использовать уровень экземпляра (то есть с префиксом $
), где у вас есть несколько экземпляров House
(или любой ресурс), как на странице списка домов.
Итак, если вы повторяете сотни экземпляров House
, вы можете легко предоставить возможность удалить House
, если вы используете действие экземпляра.Например:
Использование действия экземпляра (рекомендованное в данном примере):
<div ng-repeat="house in houses">
{{house.name}}
<a href="house.$delete()">Delete this house</a>
</div>
Но вы также можете использовать действия на уровне класса в этом случае (что не рекомендуется в данном примере)
Использование класса действия (не рекомендуется в данном примере):
<div ng-repeat="house in houses">
{{house.name}}
<a href="deleteHouse(house.uuid)">Delete this house</a>
</div>
В контроллере:
$scope.deleteHouse = function(uuid) {
House.delete({uuid: uuid});
};
Это просто обычный простой пример, который демонстрирует потребительной случай, когда использовать ветеринарный врач действий экземпляра и ясно сказано, что использование экземпляра в приведенном выше примере будет более чистым.