Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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 注入控制器时未定义服务_Javascript_Angularjs_Dependency Injection_Angularjs Controller_Angularjs Factory - Fatal编程技术网

Javascript 注入控制器时未定义服务

Javascript 注入控制器时未定义服务,javascript,angularjs,dependency-injection,angularjs-controller,angularjs-factory,Javascript,Angularjs,Dependency Injection,Angularjs Controller,Angularjs Factory,我有一个控制器,我已将工厂注入其中,但当我调用该工厂上的方法时,它返回为未定义。我不知道我做错了什么。任何帮助都将不胜感激 工厂: (function(){ 'use strict'; // Declare factory and add it 'HomeAutomation' namespace. angular.module('HomeAutomation').factory('AuthenticationService', ['$http','$localStor

我有一个控制器,我已将工厂注入其中,但当我调用该工厂上的方法时,它返回为未定义。我不知道我做错了什么。任何帮助都将不胜感激

工厂:

(function(){
    'use strict';

    // Declare factory and add it 'HomeAutomation' namespace.
    angular.module('HomeAutomation').factory('AuthenticationService', ['$http','$localStorage', '$window', function($http, $localStorage, $window){
    var service = {};


    service.login = Login;
    service.logout = Logout;
    service.parseJWT = parseJWT;
    service.loginStatus = loginStatus;

    return service;


    function Login(email, password, callback){
        $http.post('api/user/login', {email: email, password: password})
            .success(function(res){
                // Login successful if there is a token in the response.
                if(res.token){
                    // store username and token in local storage to keep user logged in between page refreshes
                    $localStorage.currentUser = { email: email, token: res.token };

                    // add jwt token to auth header for all requests made by the $http service
                    $http.defaults.headers.common.Authorization = 'Bearer ' + res.token;

                    callback(true);
                }else{
                    callback(res);
                }
            }).error(function(err){
            console.log(err);
        });
    }

    function Logout(){
        $localStorage.currrntUser
    }

    function parseJWT(token){
        var base64URL, base64;

        base64URL = token.split('.')[1];
        base64 = base64URL.replace('-', '+').replace('_', '/');

        console.log(JSON.parse($window.atob(base64)));
    }

    function loginStatus(){
        if($localStorage.currentUser){
            return true;
        }else{
            return false;
        }
    }
}]);}());
控制器:

(function(){
angular.module('HomeAutomation')
    .controller('loginController', ['$scope', '$location', 'AuthenticationService', function($scope, $location, $localStorage, AuthenticationService){
        $scope.isLoggedIn = AuthenticationService.logout();

        $scope.logUserIn = function(){
            AuthenticationService.login($scope.login.email, $scope.login.password, function(result){
                if(result === true){
                    $location.path('/');
                }else{
                    console.log(result);
                }
            });
        };

        $scope.logUserOut = function(){
            AuthenticationService.logOut();
        }
    }]);}());
这是导致错误的行:

$scope.isLoggedIn = AuthenticationService.logout();
显然,“AuthenticationService”没有定义。不知道为什么


提前感谢。

您弄乱了依赖顺序,您需要从控制器工厂函数中删除
$localStorage
,因为
$localStorage
在控制器中的任何位置都没有使用,也没有注入到DI阵列中

.controller('loginController', ['$scope', '$location', 'AuthenticationService', 
    function($scope, $location, AuthenticationService){
                //^^^^^^^^^^removed $localStorage dependency from here
注意:始终确保在DI数组中注入任何依赖项时,它们应该在控制器函数中以相同的顺序使用


注射不好:

.controller('loginController', ['$scope', '$location', 'AuthenticationService', function($scope, $location, $localStorage, AuthenticationService){
试试这个:

.controller('loginController', ['$scope', '$location', '$localStorage', 'AuthenticationService', function($scope, $location, $localStorage, AuthenticationService){
我不知道您使用哪种生成器,但例如,对于
Gulp
,您可以使用
Gulp ng annotate
,它将为您完成这项工作,因此您只能编写:

.controller('loginController', function($scope, $location, $localStorage, AuthenticationService){

没有数组。
ng注释将处理其余部分。

我确实使用gulp。我会试试看。谢谢