AngularJS - 检查我的资源工厂实现

时间:2013-12-16 13:18:47

标签: javascript api angularjs rest

刚开始使用AngularJS& js(作为后端开发人员),这是我曾经工作过的第一个Javascript MVC框架,所以请放心......

我有一个宁静的json API,我想使用AngularJS消费。

为了实现这一点,我创建了两个工厂,一个是控制器需要查询带有id的工厂时的单个工厂,另一个是不需要id的工厂。

e.g。下面:

控制器列出所有产品:

app.controller('ProductController', function($scope, ProductsFactory) {
    $scope.products = [];

    init();
    function init()
    {
        $scope.products = ProductsFactory.query();
    }
});

工厂:

app.factory('ProductsFactory', function($resource) {
    return $resource('/xxx/xxx/xxx/api/v1/product', {}, {
        query: { method: 'GET', isArray: true },
        create: { method: 'POST' }
    });
});

app.factory('ProductFactory', function($resource) {
    return $resource('/xxx/xxx/xxx/api/v1/product/:id', {}, {
        show: { method: 'GET' },
        update: { method: 'PUT', params: { id: '@id' } },
        delete: { method: 'DELETE', params: { id: '@id' } }
    });
});

问题1:我是否正确实施了资源工厂? 问题2:有没有办法只使用一个工厂的产品?例如允许工厂决定querycreate不需要ID,但showupdatedelete方法是否需要?

1 个答案:

答案 0 :(得分:1)

是的,您只能使用1个工厂:

app.factory('ProductFactory', function($resource) {
    return $resource('/xxx/xxx/xxx/api/v1/product/:id', { id : '@id'}, {
        update: { method: 'PUT' },     
    });
});

您不需要为每个请求指定'params'对象。为$资源定义它通常就足够了(但如果你想覆盖它,你当然可以使用它。)

请注意,您不需要定义CRUD方法,因为$ resource已经实现了它们(如doc:http://docs.angularjs.or/api/ngResource。$ resource中所述)。

目前,如果您想使用“PUT”但是打开拉取请求(https://github.com/angular/angular.js/pull/3416),您只需要定义自定义方法更新,我希望我们能够很快看到它实现。< / p>