AngularJS:获得“[...]不是函数”错误

时间:2015-09-02 12:12:17

标签: javascript angularjs runtime-error

我收到“Base64.encode不是函数”错误,但我不知道原因:

以下控制器“login-controller”使用LoginService:

    angular.module('app')
    .controller('login-controller',
     ['$scope', '$location', '$http', 'LoginService',  
     function($scope, $location, $http, LoginService) {
     ...
        if(LoginService.login($scope.user.name, $scope.user.password) == true)
        {
            $location.path('/chooseMandantAsk')
        }
        else
        {
            $scope.wrongCredentials = true;
        }
    ...
    }]);

以下LoginService使用Service Base64的功能:

angular.module('app')
       .service('LoginService', ['$location', '$http', 'Base64', function ($http, Base64) {

    ...

this.login = function (name, password){

            user.auth= "Basic " + Base64.encode(name + ":" + password);
            $http.defaults.headers.common.Authorization = user.auth;
            $http.get(url+'/login')
                .success(function(){  
                     return true;
                 })
                .error(function(){
                    user.auth = "";
                    delete $http.defaults.headers.common['Authorization'];
                    return false;
                });
        };

    ...

}]);

Base64服务有一个名为encode的方法:

angular.module('app').factory('Base64', function () {


    var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

        return {
            encode: function (input) {

                ...

                return output;
            },
            decode: function (input) {

                ...

                return output;
            }
        };
 });

找到了Base64服务,之前我以另一种方式使用了Base64.encode方法,它可以工作。

有人可以帮助我并告诉我,这个错误意味着什么?

BR

的Matthias

2 个答案:

答案 0 :(得分:3)

我认为在注入依赖项时缺少$ location -

service('LoginService', ['$location', '$http', 'Base64', function ($location, $http, Base64)

这就是你收到错误的原因。

答案 1 :(得分:3)

您的登录服务声明缺少$ location依赖关系,应该是:

angular.module('app')
       .service('LoginService', ['$location', '$http', 'Base64', function ($location, $http, Base64) {