使 angular 服务更加模块化

making angular Service more modular

我正在使用 John Papa 风格指南。 https://github.com/johnpapa/angular-styleguide#style-y061。我喜欢这种样式,它似乎确实使我的代码更易于阅读。但是,我按照 单独的数据调用 .

在此 John Papa 中,将 return 对象置于服务的顶部。函数内部语句在底部创建,并在调用函数时提升到顶部。

getCustomerListComplete 函数正在按预期方式提取 Json 文件。我确保 return response.data.

问题是 return 语句似乎没有将数据发送到控制器。

return {

  getCustomers: getCustomers
}    

服务开始 ******

  (function() {
    angular
        .module('app.services',[])
        .factory('customersFactory', customersFactory);

    function customersFactory($http, $log) {

        return {
            getCustomers: getCustomers
        };
        function getCustomers(){
            $http.get('./Services/customers.json')
                .then(getCustomerListComplete)
                .catch(getCustomerListFailed);

                function getCustomerListComplete(response) {
                    console.log('response.data',response.data);
                    return response.data;
                }

                function getCustomerListFailed(error) {
                    console.log('error', error);
                }
        }
    }

}());

在我的控制器内部,我收到关于承诺的错误(然后)。注意它不能读取 undefined.

Cannot read property 'then' of undefined

这是我的控制器。我相信我正在正确设置和使用它。 正在注入 customersFactory。 正在调用活动函数。不确定可能是什么问题。

 (function() {
    'use strict';

    angular
        .module('app.customers')
        .controller('CustomerController', CustomerController);

        function CustomerController($stateParams, customersFactory) {
            var vm = this;
            vm.customers = [];
            vm.orders = null;
            // table sorting
            vm.sortBy = 'name';
            vm.reverse = false;
            vm.doSort = doSort;

            activate()
            function activate() {
                return getCustomersList().then(function() {
                    console.log('activated')
                });
            }

            function getCustomersList() {
                return customersFactory.getCustomers()
                    .then(function(data) {
                        vm.customers = data;
                        return vm.customers;
                    });
            }

            function doSort(propName) {
                vm.sortBy=propName;
                vm.reverse=!vm.reverse
            }
        }
})();

你需要 return $http.get 里面 getCustomers:

return $http.get('./Services/customers.json')

我也遵循 John Papa 的风格指南,但我从未见过他这样做,因为一切都应该在函数闭包内,即:

(function () {
  ....
})();

但是是的,就像韦恩说的那样

return $http.get(...)

顺便说一句,如果他确实谈到要在关闭外返回,请尝试告诉我在哪里。