我有一个 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,就可以在任何其他模块中使用,只要它们都包含在角度应用程序中。
我更喜欢第一段代码,因为每个模块都清楚地告知开发人员自己的依赖。但是,它似乎是多余的,因为您只需要包含一次,它将在其他地方可用。这种情况的最佳实践是什么?角度如何处理幕后的重复依赖。
答案 0 :(得分:1)
出于几个原因,第一种方式绝对更好。
首先,它非常清楚,并且不依赖于任何神秘的,未传达的期望,即另一个模块包含其依赖性。
其次,由于可重用性是模块化设计的核心方面,如果您想在应用程序中使用模块,那么它将是必要的,其中模块是''不存在。
我想说最好的做法是让模块始终只列出它直接使用的模块。
如果app
使用a
和b
但不使用c
,则应将其依赖关系列为['a', 'b']
,而不是c
。
如果a
使用c
,则应将其依赖关系列为['c']
编写代码应尽可能清楚,并让程序员尽可能少地提出问题。 (我真的不想知道为什么模块c在被引用时不被包括在内)