AngularJS模块依赖注入与父模块共享其依赖关系

时间:2015-07-16 15:13:20

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-module

我有一个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注入我的应用,我的应用中的每个元素都会突然尝试动画。

现在,作为described in this Angular.js GitHub issuengAnimate将假设所有内容都应设置动画。一旦我意识到这是预期的行为,我意识到我从未将ngAnimate首先纳入我的app模块

那为什么会影响我的整个申请?它不应该只在属于ngGridPanel模块的指令中生效吗?

那么ngAnimate如何影响父模块范围?这是正常的吗?

旁注:此时我甚至根本没有使用ngGridPanel指令。我只是将它注入我的应用程序。

旁注2:在我的应用中实现了类名过滤器($animateProvider.classNameFilter(/enable-animate/);)后,动画停止在我的所有元素上,但仍然在ngGridPanel指令中工作,无需在任何地方添加enable-animate

1 个答案:

答案 0 :(得分:1)

如果你依赖于ngGridPanel而ngGridPanel依赖于ngAnimate,那么你也依赖于ngAnimate。

对您来说,就像您定义了应用程序一样 angular.module("app", ['ui.bootstrap', 'ngRoute', 'ngGridPanel', 'ngAnimate'])

至于你的附注2,似乎他们已经将它配置为使用像.classNameFilter()这样的东西,这样如果他们的图书馆的用户决定以不同的方式配置它,动画就不会破坏,例如就像你做的那样。我对ngAnimate知之甚少,所以这只是一种预感。