向Controller注入多个服务会引发错误 - AngularJs

时间:2014-12-09 07:18:37

标签: angularjs

我的代码就像这样

Services.JS
    angular.module('RateRequestApp.services', []).factory('rateRequestService', ['$http', rateRequestService]);

function rateRequestService($http) {
    var service = { getData: getData};
    return service;
    function getData() {
        return $http({
            method: 'Get',
            url: '../services/asas.asmx/GetReadOnlyData?shipmentID=' + getQuery('shipmentId')
        });
    }
    function getQuery(name) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }
}

angular.module('RateRequestApp.services', []).factory('rePrintService', ['$http', rePrintService]);
function rePrintService($http) {
    var service = { getReprintData: getReprintData };
    return service;
    function getReprintData() {
        return $http({
            method: 'Get',
            url: '../services/asas.asmx/RePrint?shipmentID=' + getQuery('shipmentId')
        });
    }
    function getQuery(name) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }

}


Controller.JS


    angular.module('RateRequestApp.controllers', []).controller
('ReadOnlyController', [
    '$scope', 'rateRequestService', 'rePrintService', '$controller',
    function($scope, rateRequestService, rePrintService, $controller) {
        $scope.rateData = [];
        rateRequestService.getData().success(function(response) {
                $scope.rateData = response;
                console.log(JSON.stringify(response));
            }).
            error(function(data, status, headers, config) {});
        rePrintService.getReprintData().success(function(response) {
            }).
            error(function(data, status, headers, config) {});

    }
]);

App.js
angular.module('RateRequestApp', [
   'RateRequestApp.services',
   'RateRequestApp.controllers',
   'ui.bootstrap'
]);

一切看起来都没问题,但这会引发错误

Error: [$injector:unpr] Unknown provider: rateRequestServiceProvider <- rateRequestService

当我只注入我的第一个服务时,它的工作正常。但是当它第二次出现时就会中断 任何人都可以指出我做错了吗?

2 个答案:

答案 0 :(得分:4)

问题是你有两个模块

angular.module('RateRequestApp.services', [])

定义,因此第二个定义将覆盖第一个保存rateRequestService服务的定义。

要正确检索现有模块,您需要使用getter语法:

angular.module('RateRequestApp.services').factory('rePrintService', ['$http', rePrintService]);

请注意,模块名称后面没有依赖关系数组[]

或者您可以使用链式表示法:

angular.module('RateRequestApp.services', [])
.factory('rateRequestService', ['$http', rateRequestService])
.factory('rePrintService', ['$http', rePrintService]);

答案 1 :(得分:-1)

我注意到的第一件事是代码本身需要更好地组织才能诚实,但无论如何。 第二件事是你需要将你创建的模块添加到&#34; RateRequestApp.controllers&#34;模块。因此代码完全类似于:

angular.module('RateRequestApp.controllers', ['RateRequestApp.services']).controller

这个+上一个答案应该可以解决问题。 祝你好运