Angular $resource get 对比 $get
Angular $resource get vs $get
我使用 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
方法的主要用例是什么?
get
、save
、query
、remove
、delete
5种常用方法在$resource
[=76] =] 可以直接通过 House
class.
调用
虽然 save
、remove
和 delete
方法可以在 House
class/resource 的实例上使用 $
前缀访问允许我们轻松地在任何实例上执行 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 体系结构中,为什么需要实例方法来获取实例上的单个记录。
同样,您可以定义自己的自定义实例和class(静态)级别方法:
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();
随意使用任何方法,即(class 或实例级操作),但我建议在有多个实例的情况下使用实例级(即带有 $
前缀)House
(或任何资源),如房屋列表页面。
因此,如果您要迭代数百个 House
实例,您可以轻松地提供删除 House
的选项(如果您使用实例操作)。例如:
使用实例动作(本例推荐):
<div ng-repeat="house in houses">
{{house.name}}
<a href="house.$delete()">Delete this house</a>
</div>
但是你也可以在这种情况下使用class级别的动作(本例中不推荐)
使用class操作(本例不推荐):
<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。 class 动作,它明确指出在上面的例子中使用实例动作会更干净。
我使用 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
方法的主要用例是什么?
get
、save
、query
、remove
、delete
5种常用方法在$resource
[=76] =] 可以直接通过 House
class.
虽然 save
、remove
和 delete
方法可以在 House
class/resource 的实例上使用 $
前缀访问允许我们轻松地在任何实例上执行 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 体系结构中,为什么需要实例方法来获取实例上的单个记录。
同样,您可以定义自己的自定义实例和class(静态)级别方法:
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();
随意使用任何方法,即(class 或实例级操作),但我建议在有多个实例的情况下使用实例级(即带有 $
前缀)House
(或任何资源),如房屋列表页面。
因此,如果您要迭代数百个 House
实例,您可以轻松地提供删除 House
的选项(如果您使用实例操作)。例如:
使用实例动作(本例推荐):
<div ng-repeat="house in houses">
{{house.name}}
<a href="house.$delete()">Delete this house</a>
</div>
但是你也可以在这种情况下使用class级别的动作(本例中不推荐)
使用class操作(本例不推荐):
<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。 class 动作,它明确指出在上面的例子中使用实例动作会更干净。