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

问题描述 投票:0回答:1

我有一个 app 模块,其中包括其他模块,例如模块 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 如何在幕后处理重复的依赖关系。

angularjs angularjs-module
1个回答
1
投票

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

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

其次,由于可重用性是模块化设计的核心方面,如果您想在模块“b”不存在的应用程序中使用该模块,那么这是“必要的”。 我想说,最佳实践是模块始终且仅列出它直接使用的模块。

如果

app

使用

a
b
但不使用
c
,那么它应该将其依赖项列为
['a', 'b']
而不是
c

如果

a

使用

c
那么它应该将其依赖项列为
['c']

代码应该写得尽可能清晰,并让程序员提出尽可能少的问题。 (我真的不想知道为什么模块 c 被引用时没有被包含)

© www.soinside.com 2019 - 2024. All rights reserved.