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

У меня есть модуль AngularJS:

angular.module("app", ['ui.bootstrap', 'ngRoute', 'ngGridPanel']).config(function($routeProvider) {

Как вы можете видеть, он включает ngGridPanel через внедрение зависимостей.

Вот определение модуля/директивы ngGridPanel:

angular.module('ngGridPanel', ['ngAnimate']).directive('gridPanel', ['$animate', '$compile', '$window', '$document', '$timeout', function ($animate, $compile, $window, $document, $timeout) {

Как видите, это относится к ngAnimate.

Проблема, с которой я сталкиваюсь, заключается в том, что как только я ввожу ngGridPanel в свое приложение, каждый элемент в моем приложении внезапно пытается анимироваться.

Теперь, как описано в этом выпуске Angular.js на GitHub, ngAnimate предполагает, что все должно быть анимированным. Как только я понял, что это ожидаемое поведение, я понял, что я никогда не включал ngAnimate в модуль своего приложения.

Так почему же это повлияет на все мое приложение? Разве это не должно действовать только в директиве, принадлежащей модулю ngGridPanel?

Так как же ngAnimate влияет на область действия родительского модуля? Это нормально?


Примечание: на данный момент я вообще не использовал директиву ngGridPanel. Я просто ввел его в свое приложение.

Примечание 2. После того, как я реализовал фильтр имени класса ($animateProvider.classNameFilter(/enable-animate/);) в своем приложении, анимация остановилась для всех моих элементов, но продолжала работать в директиве ngGridPanel без необходимости добавлять класс enable-animate куда угодно. .


person raffi    schedule 16.07.2015    source источник
comment
короткий ответ: зависимости зависимостей модулей доступны во всем приложении, как вы наблюдаете   -  person charlietfl    schedule 16.07.2015


Ответы (1)


Если вы зависите от ngGridPanel, а ngGridPanel зависит от ngAnimate, то вы также зависите от ngAnimate.

Для вас это то же самое, как если бы вы определили свое приложение с помощью angular.module("app", ['ui.bootstrap', 'ngRoute', 'ngGridPanel', 'ngAnimate']) .

Что касается вашего примечания 2, вполне вероятно, что они также настроили его для использования чего-то вроде .classNameFilter(), чтобы анимация не прерывалась, если пользователь их библиотеки решит настроить ее по-другому, как вы. Я не слишком много знаю о ngAnimate, так что это просто догадка.

person shieldstroy    schedule 16.07.2015
comment
Спасибо, тогда я думаю, что это нормальное поведение. Что касается .classNameFilter(), я проверил, библиотека его не использует. Вероятно, это влияет только на мое приложение, а не ngGridPanel, потому что я применяю его в конфигурации своего приложения, и это, вероятно, не влияет на зависимости? - person raffi; 16.07.2015
comment
Интересно. Я бы не подумал, что это возможно, поскольку после того, как вы его используете, angular трудно понять, что является сторонней зависимостью, а что вашими собственными модулями, но я определенно могу ошибаться. - person shieldstroy; 16.07.2015