AngularJS中模块依赖和服务依赖的区别
我不明白模块依赖和服务依赖之间有什么区别。比如说,AngularJS中模块依赖和服务依赖的区别,angularjs,dependency-injection,angularjs-module,angularjs-injector,Angularjs,Dependency Injection,Angularjs Module,Angularjs Injector,我不明白模块依赖和服务依赖之间有什么区别。比如说, angular.module('components.users', []) .controller('UsersController', function(Users) { //... }) angular.module('api.users', []) .factory('Users', function() { //... }); 我不明白为什么组件的控制器方法中可以传递用户服务。用户,因
angular.module('components.users', [])
.controller('UsersController', function(Users) {
//...
})
angular.module('api.users', [])
.factory('Users', function() {
//...
});
我不明白为什么组件的控制器方法中可以传递用户
服务。用户
,因为组件不需要模块。用户
模块。(我认为api.users
module应该作为必需的模块之一在module方法中传递)
换句话说
模块依赖和服务依赖之间有什么区别
为什么即使定义的模块不是必需的,服务仍然可用?模块之间的依赖关系指定每个模块(假设一个模块是一个功能包)如何需要其他模块提供的某些功能 服务依赖性是指某些东西(控制器、服务等)需要特定服务才能工作的方式 这些都是相关的。如果一个控制器(即)需要另一个模块中的服务,这里您可以证明模块依赖性和服务依赖性。如果后面提到的服务位于同一模块内。控制器的模块不必依赖于其他模块 想象一下:
- 功能1(服务1)
- 功能2(服务2)
- 功能3(服务3)
- 功能4(服务4)
功能1
需要功能2
,则无需导入模块a
即可使用,因为它们位于同一模块中。现在,如果functionaty2
需要functionaty4
,ModuleA
需要导入ModuleB
,那么functionaty4
可以被纳入ModuleA
的“范围”(用作一般意义,不要混淆)
AngularJS中的每个模块都是使用angular.module('name',[])
声明的(注意括号)。每个模块(一旦创建)都可以使用angular.module('name')
定位(注意没有括号)
您提供的代码不应工作,因为用户控制器
(在组件.用户
模块中声明)需要用户
工厂(在api.用户
模块中声明)和组件。用户
模块不导入api.用户
见下文(代码显然失败)
angular.module('components.users',[])
.controller('UsersController',函数(用户){
console.log(用户);
})
angular.module('api.users',[])
.factory('用户',函数()){
归还这个;
});代码>
每次执行角度模块时,它都会成为一个单独的模块
假设你住在一套公寓里,每栋房子都是一个单元。每栋房子都有自己的房间(服务设施)等
所以,当你想进入别人家的房间时,你需要获得其他房子的许可。在这种情况下,您正在注入特定模块,然后只有您才能访问该模块。您可以检查您是否正在使用团队的现有代码库,他们是否定义了包含您定义的“用户”服务的根或基“应用”模块。下面是一个示例,说明了这在您的项目中是如何工作的,以及您为什么能够使用“用户”服务:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8">
</head>
<body>
<div ng-controller="controller">
{{ text }}
</div>
<script src="angular.js"></script>
<script type="text/javascript">
angular.module('services',[])
.factory('service',function(){
return {
text: "this is a string value defined in a service."
}
})
;
angular.module('controllers',[])
/*
Here the service "service" is being used however
has not been specified in it's containing module.
*/
.controller('controller',function($scope,service){
$scope.text = service.text;
});
;
/*
The above works because in some way all services and controllers
have been defined. In this example by manually specifying each.
*/
angular.module('app',['services','controllers']);
</script>
</body>
</html>
{{text}}
角度。模块('services',[])
.factory('服务',函数()){
返回{
text:“这是在服务中定义的字符串值。”
}
})
;
角度模块('控制器',[]))
/*
然而,这里使用的是服务“service”
尚未在其包含模块中指定。
*/
.controller('controller',函数($scope,service){
$scope.text=service.text;
});
;
/*
上述方法之所以有效,是因为在某种程度上,所有服务和控制器
已经定义了。在本例中,通过手动指定每个。
*/
模块('app',['services','controllers']);