2014-12-09 6 views
0

Я читал многочисленные сообщения о stackoverflow, и им не помогло. У меня странная ситуация, когда мне нужно ввести Factory в контроллер и все кажется регулярным, но оно не работает.AngularJS injection Factory in 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: Cannot read property 'login' of undefined

поэтому кажется, что он не признает AuthS ervice завод почему-то.

Кто-нибудь знает, что я могу сделать, чтобы исправить это, у меня действительно нет идеи.

ответ

2

Вводимые параметры не соответствуют параметрам вашей функции.

Изменение:

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

To:

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

Я предпочитаю не использовать массив INJECT хотя:

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

Не используется массив INJECT прекрасно, если вы не Минимизировать/уродовать СВОЙ Код – Phil

+0

Ну, это был действительно хороший совет, не используя массив. Это будет полезно. – T0plomj3r

+1

Вот почему удивительные люди сделали такие вещи, как grunt-ng-annotate, поэтому вы можете добавить эти аннотации, прежде чем сжимать свой код. – Enzey

Смежные вопросы