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

AngularJS - Check my implementation of resource factory

本文关键字:实现 工厂 资源 检查 我的 AngularJS-      更新时间:2023-09-26

刚开始使用AngularJS&js(作为一名后端开发人员),这是我开发过的第一个Javascript MVC框架,所以请轻松。。。

我有一个restful json API,我想使用AngularJS使用它。

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

例如以下:

控制器列出所有产品:

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:有没有一种方法可以只使用一个工厂生产产品?例如,允许工厂决定id对于querycreate不是必需的,但是对于showupdatedelete方法是必需的?

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

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

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

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

目前,如果您想使用"PUT",但打开了一个pull请求,则只需要定义一个自定义方法更新(https://github.com/angular/angular.js/pull/3416)我希望我们能够期待它很快得到实施。