【问题标题】:Angular $resource get vs $getAngular $resource get 与 $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 方法的主要用例是什么?

【问题讨论】:

    标签: javascript angularjs rest get ngresource


    【解决方案1】:

    $resource 类中提供了 5 种常用方法 getsavequeryremovedelete,可以直接通过 House 类调用。

    saveremovedelete 方法可以通过House 类/资源实例上的$ 前缀访问,这使我们能够轻松地对任何实例执行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 架构中思考,为什么需要实例方法来获取实例上的单个记录。

    同样,您可以定义自己的自定义实例和类(静态)级方法:

    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. 的用例。类动作,它明确指出在上面的例子中使用实例动作会更干净。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 2018-01-07
      • 1970-01-01
      • 2019-12-16
      • 2016-04-03
      • 2017-12-14
      相关资源
      最近更新 更多