AngularJS注入工厂进入Controller奇怪的错误

时间:2014-12-09 00:17:44

标签: javascript angularjs

我已经阅读了有关stackoverflow的大量帖子,而且他们的确非常有帮助。 我有奇怪的情况,我需要将Factory注入Controller和 一切似乎都很规律,但它不起作用。

这是工厂:

zimmerApp.factory('AuthService', [function ($http, $sanitize) {
var sanitizeCredentials = function (credentials) {
    return {
        email: $sanitize(credentials.email),
        password: $sanitize(credentials.password),
        csrf_token: credentials.csrf_token
    };
};
return {
    login: function (credentials) {
        var login = $http.post("/login", sanitizeCredentials(credentials));
        login.success(cacheSession);
        login.error(loginError);
        return login;
    }
};
}]);

和我需要使用AuthService的控制器是:

zimmerApp.controller('loginCtrl', ['$scope', 'AuthService',
    function ($scope, $location, AuthService) {
    var xhReq = new XMLHttpRequest();
    xhReq.open("GET", "http://" + window.location.hostname + ":8000/auth/token", false);
    xhReq.send(null);

    $scope.error = false
    $scope.credentials = {
        username: '',
        password: '',
        csrf_token: xhReq.responseText
    };

    $scope.login = function (credentials) {
        AuthService.login($scope.credentials)
            .success(function () {
                $location.path('/');
            })
            .error(function (err) {
                console.log('error')
            });
    }
}]);

我得到的错误是

  

TypeError:无法读取属性'登录'未定义的

因此出于某种原因,它似乎无法识别AuthService工厂。

有谁知道我能做些什么来解决这个问题,我真的不知道了。

1 个答案:

答案 0 :(得分:2)

注入的参数与函数中的参数不匹配。

变化:

 zimmerApp.controller('loginCtrl',
     ['$scope', 'AuthService',
      function ($scope, $location, AuthService) {

要:

zimmerApp.controller('loginCtrl',
    ['$scope', $location, 'AuthService',
    function ($scope, $location, AuthService) {

我不喜欢使用inject数组:

zimmerApp.controller('loginCtrl',
    function ($scope, $location, AuthService) {