如何设计两个模块在angularjs中包含相同的依赖性问题

时间:2016-10-19 17:54:27

标签: angularjs angular-module

我有一个 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,就可以在任何其他模块中使用,只要它们都包含在角度应用程序中。

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

1 个答案:

答案 0 :(得分:1)

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

首先,它非常清楚,并且不依赖于任何神秘的,未传达的期望,即另一个模块包含其依赖性。

其次,由于可重用性是模块化设计的核心方面,如果您想在应用程序中使用模块,那么它将是必要的,其中模块是''不存在。

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

如果app使用ab但不使用c,则应将其依赖关系列为['a', 'b'],而不是c

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

编写代码应尽可能清楚,并让程序员尽可能少地提出问题。 (我真的不想知道为什么模块c在被引用时不被包括在内)