是否可以将完整的模块注入控制器而不是单独注入每个服务?
例如:
var app = angular.module('myApp', ['myApp.core']);
angular.module('myApp.core', [])
.factory('ABService', function() {
return {
getA: function() {
return 'A';
},
getB: function() {
return 'B';
}
}
})
.factory('AnotherService', function() {
return {
calc: function(a, b) {
return a + b;
}
}
})
app.controller('MainCtrl', function($scope, 'myApp.core') {
ABService.getA();
AnotherService.calc(2, 2);
});
而不是
app.controller('MainCtrl', function($scope, ABService, AnotherService) {
ABService.getA();
AnotherService.calc(2, 2);
});
答案 0 :(得分:0)
没有
为什么?
您无法将模块注入控制器,让我们看看这张图片:
我们可以从中看到:模块是一种自我组件,它构建在控制器,指令,服务和过滤器之上,等等。
真正的问题来自:
模块可以没有控制器吗?
是。 模块中的控制器不是必需的。它几乎取决于该模块的工作,它完全可以由服务和指令组成。
我们可以将模块中的服务注入另一个模块的控制器吗?
是。 您完全可以,当您尝试构建商店网站时,通常会使用此做法,但在更多情况下可能会发生这种做法。
您可能拥有以下模块:浏览项目,搜索项目等等。
但是如何以这种方式创建购物车?
让我们看看:购物车看起来像是我的一个组成部分。
为什么?
因为我想要与其他代码分开测试, 它也像一个组件一样构建,应该拥有它自己独特的服务和指令,并且从我的观点来看,应该从应用程序的其余部分派生出来。
所以我们应该建立一个模块!
确切地说,无论何时您尝试从商店的模块控制器使用购物车,您只需注入帮助您从该模块构建购物车的服务,您可以将规则应用于商店的控制器。
就你的问题而言: 我认为您正在尝试做什么,或至少在您的情况下可以做的事情:
要将模块a
中的服务注入位于模块b
中的控制器,则无需注入"完整的模块进入控制器,它没有多大意义。
我希望我解释它听起来和我脑子里听起来一样好:)。
答案 1 :(得分:0)
不,但如果您真的愿意,可以将您的服务包装成一个“上帝”服务(我个人不会推荐)
angular.module('myApp.core', [])
.factory('ABService', function() {
return {
getA: function() {
return 'A';
},
getB: function() {
return 'B';
}
}
})
.factory('AnotherService', function() {
return {
calc: function(a, b) {
return a + b;
}
}
})
.factory('GodService', function(ABService, AnotherService) {
return {
ABService: ABService,
AnotherService: AnotherService
}
})
然后您可以注入GodService
并致电ABService
和AnotherService
。