Angular $resource get 与 $get
Posted
技术标签:
【中文标题】Angular $resource get 与 $get【英文标题】:Angular $resource get vs $get 【发布时间】:2016-02-18 16:52:57 【问题描述】:我使用 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
但是
资源实例中有奇怪的$get
方法
house.$get(...) // what is $get?
有什么区别?我该如何使用它们? $get
方法的主要用例是什么?
【问题讨论】:
【参考方案1】:$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. 的用例。类动作,它明确指出在上面的例子中使用实例动作会更干净。
【讨论】:
以上是关于Angular $resource get 与 $get的主要内容,如果未能解决你的问题,请参考以下文章
当没有定义 CSRF 时,Angular $resource 查询在 PUT 上获得 401,在定义 CSRF 时在 GET 上获得 404:/
GET http://localhost:4200/resource 404(未找到)
GET http://localhost:4200/resource 404(未找到)