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 方法的主要用例是什么?

getsavequeryremovedelete5种常用方法在$resource[=76] =] 可以直接通过 House class.

调用

虽然 saveremovedelete 方法可以在 House class/resource 的实例上使用 $ 前缀访问允许我们轻松地在任何实例上执行 CRUD 操作。

将此与 Java 方法进行比较,即所有 5 个没有 $ 的方法在 Java 中都是静态方法,而所有 3 个(saveremovedelete) 带有 $ 前缀的是实例级方法。

考虑示例:

// 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});

类似地用于其他方法,如 saveremove。我不确定 $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 动作,它明确指出在上面的例子中使用实例动作会更干净。