我已经阅读了有关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工厂。
有谁知道我能做些什么来解决这个问题,我真的不知道了。
答案 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) {