1

我有一个应用程序模块,其中包括另一个模块,例如模块ab。但是模块ab都依赖于模块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 应用程序中。

我更喜欢第一段代码,因为每个模块都清楚地告知开发人员它自己的依赖关系。但是,这似乎是多余的,因为您只需要包含一次,它将在其他地方可用。这种情况的最佳实践是什么,以及角度如何在幕后处理重复的依赖关系。

4

1 回答 1

1

出于几个原因,第一种方法绝对更好。

首先,它非常清楚并且不依赖于任何神秘的、未沟通的期望,即另一个模块正在包含其对它的依赖项。

其次,为了将可重用性作为模块化设计的核心方面,如果您想在不存在模块“b”的应用程序中使用该模块,则有必要这样做。

我想说最好的做法是让一个模块始终并且只列出它直接使用的模块。

如果app使用aand bbut notc那么它应该列出它的依赖为['a', 'b']but not c

如果a使用c,则应将其依赖项列为['c']

代码应该写得尽可能清晰,让程序员尽可能少问问题。(我真的不想想知道如果模块 c 被引用,为什么不包括在内)

于 2016-10-19T18:12:28.577 回答