Angular服务是一个需要js模块,没有得到注入的依赖项

时间:2014-06-24 12:18:26

标签: angularjs requirejs restangular

我有一个模块'global.services',我在其中注册了一个服务“Restservices”

(function(define, angular) {
"use strict";

define(["global/services/restServices"],
    function(RestServices) {
        var moduleName = "global.services";

        angular.module(moduleName, [])
            .config(function(RestangularProvider) {
                RestangularProvider.setBaseUrl('http://localhost:8888/src/app/data/');
                RestangularProvider.setRequestSuffix('.json');
            })
            .factory('RestServices', RestServices);
        return moduleName;
    });
}(define, angular));

我的“RestService”也是一个模块

(function(define, angular) {
"use strict";

define(function() {
    var restService = function($rootScope, Restangular) {
        // body...

        return {
            getData: function(arg) {
                // body...
                $rootScope.$broadcast('gettingData');
                return Restangular.oneUrl('listPanel');
            }
        }
    };
    return restService;
 });
}(define, angular));

在上面的服务中,$ rootScope和Restangular都是未定义的。 请告诉我如何在这方面注入依赖项。

1 个答案:

答案 0 :(得分:0)

我发现$ rootScope和Restangular未定义的原因。

工厂注册是完美的,但当我尝试在不同模块的控制器中使用它时,我正在注入" global / services / restServices"而不是"全球/服务/服务"这是实际的服务模块。

上一个代码:

(function(define, angular) {
define(['global/services/restServices'], function(RestServices) {
    var HeaderController = function($scope, $rootScope, $translate, $location, $document, RestServices) {

        var user_modules = window.SESSION.getModules(),
            modules = [];

        angular.forEach(user_modules, function(moduleName) {
            modules.push(window.CONFIG.MODULES[moduleName]);
        });

        RestServices.getData('webAppsData.json').get().then(function(d) {
            if (d) {
                if (d.response) {
                    $scope.webApps = d.response;
                } else {
                    $scope.webApps = [];
                }
            } else {
                $scope.webApps = [];
            }
        });
        $scope.title = "Tumbler";
        $scope.modules = modules;
    };
    return ["$scope", "$rootScope", "$translate", "$location", "$document", "RestServices", HeaderController];
})
}(define, angular));

现在的代码(工作):

(function(define, angular) {
define(['global/services/services'], function() {
    var HeaderController = function($scope, $rootScope, $translate, $location, $document, RestServices) {

        var user_modules = window.SESSION.getModules(),
            modules = [];

        angular.forEach(user_modules, function(moduleName) {
            modules.push(window.CONFIG.MODULES[moduleName]);
        });

        RestServices.getData('webAppsData.json').get().then(function(d) {
            if (d) {
                if (d.response) {
                    $scope.webApps = d.response;
                } else {
                    $scope.webApps = [];
                }
            } else {
                $scope.webApps = [];
            }
        });
        $scope.title = "Tumbler";
        $scope.modules = modules;
    };
    return ["$scope", "$rootScope", "$translate", "$location", "$document", "RestServices", HeaderController];
})
}(define, angular));

因此,只需注入模块并使用其服务即可。