我使用Angular $resource
服务,但我不清楚为什么主查询有两种不同的方法。
我可以这样做:
var House = $resource('/house/:uuid', {}); // create resource
var houseUuid = '123';
var house = new House.get({uuid: houseUuid}); // create resource instance
...然后在我的控制器中:
$scope.house = house; // after get request to server data will be putted to model
BUT
资源实例中有奇怪的$get
方法
house.$get(...) // what is $get?
有什么区别?我该如何使用它们?什么是$get
方法的主要用例?
答案 0 :(得分:4)
可以调用的get
类中提供了5种常用方法save
,query
,remove
,delete
和$resource
直接在House
上。
虽然可以使用save
类/资源实例上的remove
前缀访问delete
,$
和House
方法,这样我们就可以轻松在任何实例上执行CRUD操作。
将其与Java方法进行比较,即没有$
的所有5种方法都是Java中的静态方法,而所有3种方法(save
,remove
和delete
)都是{{1前缀是实例级方法。
考虑一下这个例子:
$
与// 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
方法是否可用,因为这确实不需要。如果您认为在MVC架构中,为什么需要一个实例方法来获取实例上的单个记录。
同样,您可以定义自己的自定义实例和类(静态)级别方法:
$get
现在你可以致电:
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>
这只是一个简单的简单示例,它演示了何时使用实例操作v.s.的用例。类动作,它清楚地表明在上面的例子中使用实例动作将更清晰。