使角度服务更加模块

时间:2015-09-08 01:35:53

标签: angularjs service modularity

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

在这个John Papa中,将返回对象放在服务的顶部。函数语句的内部在底部创建,并在调用函数时提升到顶部。

getCustomerListComplete函数正在按照预期来安慰Json文件。我确保返回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
            }
        }
})();

2 个答案:

答案 0 :(得分:2)

您需要在$http.get内返回getCustomers

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

答案 1 :(得分:1)

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

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

但是,是的,就像韦恩说你应该

return $http.get(...)
是的,如果他确实谈到在关闭之外返回,请试着告诉我在哪里。