Angularjs 组织和使用NGR资源的优雅方式

Angularjs 组织和使用NGR资源的优雅方式,angularjs,code-organization,Angularjs,Code Organization,我的应用程序需要与各种表和视图交互。我是新来的,我想不出一个优雅的方式来组织我的ngResource应用程序中的服务。有什么建议吗? 我认为我的控制器声明中充满了服务 /app/app.resource.js angular.module('totalizacao').factory('ldap', ['$resource', function($resource) { return $resource('api.php/ldap/:usuario/:senha', {usuario:

我的应用程序需要与各种表和视图交互。我是新来的,我想不出一个优雅的方式来组织我的ngResource应用程序中的服务。有什么建议吗? 我认为我的控制器声明中充满了服务

/app/app.resource.js

angular.module('totalizacao').factory('ldap', ['$resource', function($resource) {
    return $resource('api.php/ldap/:usuario/:senha', {usuario: '@usuario', senha:''}, {
        login: {
            isArray: false,
            method: 'POST'
        }
    });
}]);


angular.module('totalizacao').factory('tb_agendamentos_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_agendamentos_llpp/:ID', {'ID' :''});
}]);

angular.module('totalizacao').factory('tb_atendimentos_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_atendimentos_llpp/:ID', {'ID' :''});
}]);

angular.module('totalizacao').factory('tb_grupo_oferta_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_grupo_oferta_llpp/', {});
}]);

angular.module('totalizacao').factory('tb_mvmt_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_mvmt_llpp/', {});
}]);

ngular.module('totalizacao').factory('tb_ofertas_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_ofertas_llpp/', {});
}]);


angular.module('totalizacao').factory('tb_score_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_score_llpp');
}]);

angular.module('totalizacao').factory('tb_vendas_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_vendas_llpp/:ID_LNHA', {ID_LNHA: ''});
}]);

angular.module('totalizacao').factory('tb_vendas_servicos_llpp', ['$resource', function($resource) {
    return $resource('api.php/tb_vendas_servicos_llpp/:ID', {'ID' :''});
}]);

angular.module('totalizacao').factory('vw_agendamentos_llpp', ['$resource', function($resource) {
    return $resource('api.php/vw_agendamentos_llpp/');
}]);

angular.module('totalizacao').factory('vw_arvore_ofertas_llpp', ['$resource', function($resource) {
    return $resource('api.php/vw_arvore_ofertas_llpp/', {});
}]);

.
.
.
我的控制器

angular.module('totalizacao').controller('arvoreOferta', 
            ['$routeParams','$rootScope','$scope','vw_vendas_llpp','vw_arvore_ofertas_llpp'
            ,'tb_grupo_oferta_llpp', 'tb_ofertas_llpp', 'tb_agendamentos_llpp','tb_atendimentos_llpp'
            ,'tb_vendas_servicos_llpp', 'vw_vendas_servicos_llpp'
             ,'vw_agendamentos_llpp','tb_score_llpp','vw_ofertas_totais','dateFilter'
        , function($routeParams, $rootScope, $scope, vw_vendas_llpp, vw_arvore_ofertas_llpp
                  ,tb_grupo_oferta_llpp, tb_ofertas_llpp, tb_agendamentos_llpp
                  , tb_atendimentos_llpp, tb_vendas_servicos_llpp, vw_vendas_servicos_llpp
                  , vw_agendamentos_llpp, tb_score_llpp, vw_ofertas_totais, dateFilter){

        var self = this;
.
.
.

我总是更喜欢使用$http,因为我可以更好地控制它的通用性,实际上$resource在内部使用$http。但由于您使用了$resource,所以我正在努力以$resource的方式进行操作

请原谅我的语法和编译错误,因为我直接在这里输入。 您可以创建一个公共服务或工厂,比如apiService或apiFactory,然后传递所需的参数、http方法和操作等。。 我不会深入讨论编码细节,因为它取决于您如何概括和传递什么,但类似于以下内容:

//First create a constant object:

angular.module('totalizacao').constant('apiConstants', {
    totalizacao: 'api.php/tb_mvmt_llpp/',
    totalizacao1: 'api.php/tb_mvmt_llpp1/'
});

// Generalise your factory as you want this is to give you an idea.
angular.module('totalizacao').factory('apiFactory', ['$resource','apiConstants', function($resource) {
    var apiFactory = {};
   /* Http Method  = GET, PUT, POST;
       MethodName = { 'get':    {method:'GET'},
    'save':   {method:'POST'},
    'query':  {method:'GET', isArray:true},
    'remove': {method:'DELETE'},
    'delete': {method:'DELETE'} };*/
    apiFactory.executeApi = function(url, methodName, httpMethod, params){
        var paramNames = Object.keys(params);// getKeys
        //construct url
        // you can put a for loop here to make it more generic for multiple params
        //params[paramNames[i]] will get you the value, here i just have one
        var completeUrl = url + ':' + paramNames[0]; // api.php/tb_mvmt_llpp/:paramName1

        var resources = $resource(completeUrl, null, {
                          apiMethod: {
                              method: httpMethod
                          }
                    });
       //you can return the promise or return the value
      resources[methodName](params) ///resources['get'](params)
            .$promise.then(function(user) {
          // do something

        });
        return // resources[methodName](params).$promise or some variable after

    };

    return apiFactory;
});
在控制器中,注入apiFactory、ApicOnStats并执行以下操作

    var params = {
       paramName1 : 'paramValue1'
    };
    apiFactory.executeApi(apiConstants.totalizacao, 'get', params).then(success,error);

    function success(){};
    function error(){};