我有一个 app 模块,其中包括其他模块,例如模块 a 和 b。但模块 a 和 b 都依赖于模块 c。请参阅以下内容
var app = angular.module('app', ['a', 'b']);
app.controller('AppCtrl', function(Containner) {
console.log(Containner); //Avaiable
});
var a = angular.module('a', ['c']);
a.controller('ACtrl', function(Containner) {
console.log(Containner); //Avaiable
});
var b = angular.module('b', ['c']);
b.controller('BCtrl', function(Containner) {
console.log(Containner); //Avaiable
});
var c = angular.module('c', []);
c.factory('Containner', function() {
return {
test: 'test'
}
});
据我了解,您只需要包含一个模块一次,然后您就可以在其他模块中访问它,即使您不将其包含为依赖项。请参阅以下内容
var app = angular.module('app', ['a', 'b']);
app.controller('AppCtrl', function(Containner) {
console.log(Containner);
});
var a = angular.module('a',[]);
a.controller('ACtrl', function(Containner) {
console.log(Containner); //YOU CAN STILL GET IT
});
var b = angular.module('b', ['c']);
b.controller('BCtrl', function(Containner) {
console.log(Containner);
});
var c = angular.module('c', []);
c.factory('Containner', function() {
return {
test: 'test'
}
});
模块A没有C作为其依赖,但它仍然可以访问C的服务。也就是说,我假设只要您将 C 包含在一个地方,您就可以在任何其他模块中使用,只要它们都包含在角度应用程序中即可。
我更喜欢第一段代码,因为每个模块都清楚地告知开发人员其自己的依赖关系。然而,这似乎是多余的,因为你只需要包含一次,它就可以在其他地方使用。这种情况的最佳实践是什么,以及 Angular 如何在幕后处理重复的依赖关系。
第一种方法绝对更好,有几个原因。
首先,它非常清楚,并且不依赖于任何神秘的、未沟通的期望,即另一个模块包含其依赖项。
其次,由于可重用性是模块化设计的核心方面,如果您想在模块“b”不存在的应用程序中使用该模块,那么这是“必要的”。 我想说,最佳实践是模块始终且仅列出它直接使用的模块。
如果
app
使用
a
和 b
但不使用 c
,那么它应该将其依赖项列为 ['a', 'b']
而不是 c
。如果
a
使用
c
那么它应该将其依赖项列为 ['c']
代码应该写得尽可能清晰,并让程序员提出尽可能少的问题。 (我真的不想知道为什么模块 c 被引用时没有被包含)