Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS服务在注入时未定义_Javascript_Angularjs_Dependency Injection - Fatal编程技术网

Javascript AngularJS服务在注入时未定义

Javascript AngularJS服务在注入时未定义,javascript,angularjs,dependency-injection,Javascript,Angularjs,Dependency Injection,Stackoverflow在这个标题下有很多问题,但我将逐一讨论,并没有看到我所做的有意义的不同。更重要的是,这不是我唯一的服务,其余的都可以 我的服务: (function () { var envService = function ($location) { //Removed return { //Removed for SO, was simply an object of funct

Stackoverflow在这个标题下有很多问题,但我将逐一讨论,并没有看到我所做的有意义的不同。更重要的是,这不是我唯一的服务,其余的都可以

我的服务:

(function () {    
    var envService = function ($location) {    
        //Removed           
        return {
            //Removed for SO, was simply an object of functions    
    }    
    var module = angular.module('passwordResetApp');
    module.factory('envService', ['$location', envService]);
}());
我的app.js:

(function () {
    'use strict';
    var app = angular.module('passwordResetApp', ['ngRoute', 'AdalAngular', 'ui.grid', 'ui.grid.pagination', 'ui.grid.edit', 'ui.grid.cellNav', 'ui.grid.selection']);
app
    .config([
            '$routeProvider', '$httpProvider', 'adalAuthenticationServiceProvider', '$locationProvider',
            function ($routeProvider, $httpProvider, adalProvider, $locationProvider) {
                $routeProvider
                    .when('/home',
                        {
                            templateUrl: '/app/views/home.html',
                            caseInsensitiveMatch: true
                        })
                    .when('/PasswordReset',
                        {
                            templateUrl: '/app/views/passwordReset.html',
                            controller: 'ResetRequestController as vm',
                            //requireAdLogin: true,
                            caseInsensitiveMatch: true
                        })
                    .when('/UserSearch',
                        {
                            templateUrl: '/app/views/userSearch.html',
                            controller: 'UserSearchController as vm',
                            //requireAdLogin: true,
                            caseInsensitiveMatch: true
                        })
                    .otherwise({ redirectTo: '/home' });
                adalProvider.init(
                    {
                        instance: 'https://login.microsoftonline.com/',
                        tenant: 'Removed for SO',
                        clientId: 'Removed for SO',
                        requireADLogin: false,
                        //anonymousEndpoints: [
                        //    '/'
                        //],
                        //endpoints: [
                        //    '/'
                        //],
                        extraQueryParameter: 'nux=1',
                        cacheLocation: 'localStorage',
                        // enable this for IE, as sessionStorage does not work for localhost.
                    },
                    $httpProvider
                );

                $locationProvider.html5Mode(true).hashPrefix('!');
            }
        ]
    );

app.directive('header',
    function() {
        return {
            //Attribute, not element
            restrict: 'A',
            replace: true,
            templateUrl: 'app/views/_header.html',
            controller: 'HeaderController as vm',
            caseInsensitiveMatch: true
        }
    });

app.directive('footer',
    function() {
        return {
            restrict: 'A',
            replace: true,
            templateUrl: 'app/views/_footer.html',
            caseInsensitiveMatch: true
        }
    });

app.run([
    '$route', '$http', '$rootScope', '$location',
    function ($route, $http, $rootScope) {
        $http.defaults.withCredentials = true;
        $rootScope.getUrlPath = function (url) {
            return baseUrl + url;
        };
    }
]);
}());
以及试图注入服务的控制器:

(function () {
    'use strict';    
    var app = angular.module('passwordResetApp');    
    var headerController = function ($scope, $location, envService, adalService) {
        var vm = this;
        vm.currentUser = {};
        vm.environment = envService.getEnvironment();

        vm.changeView = function(view) {
            $location.path(view);
        };

        vm.login = function () {
            adalService.login();
        };

        vm.logout = function () {
            adalService.logOut();
        };
    };

    app.controller('HeaderController', ['adalAuthenticationService', headerController]);    

}());

您必须在DI数组中注入所有依赖项,以便在控制器函数中使用它们。确保序列不被打乱

app.controller('HeaderController', ['$scope', '$location', 'envService', 'adalService', headerController]);

这绝对解决了问题。我会接受它一次,所以它的13分钟计时器让我。但是,在使用其他自定义服务的其他控制器中,我没有这样做。就为了我的概念性理解,你知道为什么我能够在
app.controller()
方法中插入这些服务而不指定它们的字符串名称吗?实际上,你可以阅读我的类似问题,如果你仍然没有得到你想要的,请告诉我。谢谢:)订单就是这样