javascript – Angular $resource get vs $get
作者:互联网
我使用Angular $资源服务,我不清楚为什么主查询有两种不同的方法.
我可以做这个:
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
但
资源实例中有奇怪的$get方法
house.$get(...) // what is $get?
有什么不同?我该如何使用它们? $get方法的主要用途是什么?
解决方法:
$resource类中提供了5种常见的get,save,query,remove和delete常用方法,可以直接通过House类调用.
虽然可以使用House类/资源实例上的$前缀访问save,remove和delete方法,这样我们就可以在任何实例上轻松执行CRUD操作.
将其与Java方法进行比较,即没有$的所有5种方法都是Java中的静态方法,而带有$前缀的所有3种方法(保存,删除和删除)都是实例级方法.
考虑这个例子:
// 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});
类似于其他方法,如保存和删除.我不确定$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(或任何资源)实例,如在Houses的列表页面中.
因此,如果您正在迭代数百个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});
};
这只是一个简单的简单示例,它演示了何时使用实例操作v.s.的用例.类动作,它清楚地表明在上面的例子中使用实例动作将更清晰.
标签:javascript,rest,angularjs,get,ngresource 来源: https://codeday.me/bug/20190623/1271487.html