我正在尝试将登录模块实现到AngularJS应用程序。我尝试从(this)authenticationService调用UserService,但未定义UserService。我现在做错了什么,为什么UserService未定义?
var authenticationService = angular.module('authenticationService', []);
authenticationService.factory('authenticationSvc', ['$http', '$cookieStore', '$rootScope', '$timeout', 'UserService',
function AuthenticationService($scope, $http, $cookieStore, $rootScope, $timeout, UserService) {
var service = {};
service.Login = Login;
service.SetCredentials = SetCredentials;
service.ClearCredentials = ClearCredentials;
return service;
function Login(username, password, callback) {
var response;
UserService.GetByUsername(username) //UserService is unidefined!!!
.then(function (user) {
if (user !== null && user.password === password) {
response = { success: true };
} else {
response = { success: false, message: 'Username or password is incorrect' };
}
callback(response);
});
}
答案 0 :(得分:0)
编辑:看一下你的依赖注入:你应该在依赖数组中拥有与你函数中的参数数量相同的元素数量。您在数组中注入$scope
,而不是在参数中注入。你应该总是以正确的顺序注入每个依赖关系:在这里,Angular认为$scope
对应于你的$http
参数,$http
服务对应于你的$cookieStore
参数,依此类推,直到引用依赖关系数组的第6个元素的UserService
为...未定义。
尝试
authenticationService.factory('authenticationSvc', ['$scope','$http', '$cookieStore', '$rootScope', '$timeout', 'UserService',
function AuthenticationService($scope, $http, $cookieStore, $rootScope, $timeout, UserService) {
...
}
]);
相反。
此外,还有这一行
var authenticationService = angular.module('authenticationService', []);
您创建了一个没有依赖关系的新模块([]
)我的猜测是UserService
在另一个模块中定义,而不是在当前服务模块中注入,也不在应用程序中注入。 s主模块,因此无法使用。
对于记录:angular.module(name,array)
创建一个新模块,该模块取决于数组中传递的模块。 angular.module(name)
撤销以前创建的模块。
我不认为你需要一个新服务的模块。如果您在与UserService
相同的模块中定义身份验证服务,则默认情况下它将可用。
编辑:另外,请注意您的命名模式:例如,根据您的代码,如果我想将身份验证服务作为服务依赖项包含在内,我必须包含authenticationSvc
而不是{{1} } ...