$resource 类中提供了 5 种常用方法 get、save、query、remove 和 delete,可以直接通过 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});
};
这只是一个简单的示例,它演示了何时使用实例操作 vs. 的用例。类动作,它明确指出在上面的例子中使用实例动作会更干净。