AngularJS Зависимость основного модуля - PullRequest
0 голосов
/ 10 июля 2020

Допустим, у меня есть приложение с клиентским модулем, модулем продукта и основным модулем. В своем модуле приложения я импортирую все три модуля (клиент, продукт, ядро). По этой причине и клиент, и модуль продукта будут иметь доступ к базовому модулю. Однако, если, например, мой клиентский модуль полагается именно на службу в основном модуле, должен ли я также импортировать основной модуль в свой клиентский модуль?

В принципе, стоит ли добавить мой основной модуль импортировать во все модули, которые требуют этого, А ТАКЖЕ в моем модуле приложения? Или я должен просто включить основной модуль на уровне приложения, а другие модули доверять тому, что основной модуль всегда будет импортироваться на уровне приложения?

1 Ответ

0 голосов
/ 11 июля 2020

Дело не в

вере в то, что основной модуль всегда будет импортироваться на уровне приложения

, а в том, как AngularJS управляет модулями. Когда вы пишете что-то вроде этого

angular.module('app', ['A','B','C']);

В основном вы говорите, что для того, чтобы модуль app работал, вам необходимо импортировать модули A, B и C. Впоследствии в модуле B, возможно, вам придется импортировать некоторые другие модули

angular.module('B', ['C', 'D', 'E', 'F']);

Как вы видите в этом примере, C требуется как из приложения, так и из модуля B.

AngularJS неявно строит дерево для этих зависимостей, в котором будет

  • приложение как root
  • A, B, C на первом уровне
  • D, E, F как выходит на втором уровне, всех дочерних элементов B

C нет снова на втором уровне, так как он уже присутствует на первом. Затем Angular продолжит загрузку всех модулей от root до листьев, смотрящих на дерево.

Итак, отвечая на ваш вопрос: AngularJS достаточно умен, чтобы избежать загрузка материала несколько раз только потому, что вы дважды заявили об этом по ошибке. При построении этого дерева учитываются дубликаты.

Чего вам следует избегать:

angular.module('app', ['A']);
angular.module('A', ['B']);
angular.module('B', ['C']);
angular.module('C', ['A']);

Как вы можете видеть, сгенерированный график выглядит следующим образом:

app -> A -> B -> C -> A -> B -> C -> A -> ....

И у вас есть цикл, который angular никогда не разрешится.

...