Javascript 将服务注入AngularJS中的另一个服务
我正在尝试实现AngularJS应用程序的登录模块。我尝试从(此)authenticationService调用UserService,但UserService未定义。我现在做错了什么,为什么UserService没有定义Javascript 将服务注入AngularJS中的另一个服务,javascript,angularjs,Javascript,Angularjs,我正在尝试实现AngularJS应用程序的登录模块。我尝试从(此)authenticationService调用UserService,但UserService未定义。我现在做错了什么,为什么UserService没有定义 var authenticationService = angular.module('authenticationService', []); authenticationService.factory('authenticationSvc', ['$http', '$c
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);
});
}
编辑:看看依赖项注入:依赖项数组中的元素数应该与函数中的参数数相同。将
$scope
注入数组中,而不是参数中。您应该始终以正确的顺序将每一个依赖项都注入到这两者中:这里,$scope
对应于您的$http
参数,$http
服务对应于您的$cookieStore
参数,依此类推,直到UserService
引用依赖项数组的第6个元素,即。。。未定义
试一试
相反
还有,这条线,
var authenticationService = angular.module('authenticationService', []);
您创建了一个没有依赖项的新模块([]
)我猜用户服务
是在另一个模块中定义的,该模块既没有注入到当前服务模块中,也没有注入到应用程序的主模块中,因此不可用
对于记录:angular.module(名称,数组)
创建一个新模块,该模块取决于数组中传递的模块<代码>角度。模块(名称)检索以前创建的模块
不过,我认为您不需要为单个服务安装新模块。如果在与用户服务
相同的模块中定义身份验证服务,则默认情况下该服务可用
编辑:另外,请注意您的命名模式:例如,给定您的代码,如果我想将身份验证服务作为服务依赖项包括在内,我必须包括
authenticationSvc
,而不是authenticationService
…,因此,当我调用factory并尝试向UserService添加依赖项时,这还不够?如果他们在同一个模块中就足够了。但事实并非如此。相反,您必须将模块作为模块依赖项注入,然后将服务本身作为服务依赖项注入。@Sami Tieselune是正确的,根据建议的设计,您应该将所有服务保留在同一个模块中。错误如下:(TypeError:无法读取未定义的属性“GetByUsername”。在我的“设计”中每个服务都在自己的文件中,当使用ngResource时,我没有这个问题。实际上,我想我知道这里出了什么问题。我正在立即更新我的答案。
var authenticationService = angular.module('authenticationService', []);