我有一个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放在我的应用程序模块中。

那为什么会影响我的整个应用程序呢?它不应该仅在属于ngGridPanel模块的指令中生效吗?

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



旁注:至此,我什至根本没有使用ngGridPanel指令。我只是将其注入到我的应用程序中。

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

最佳答案

如果您依赖ngGridPanel并且ngGridPanel依赖ngAnimate,那么您也依赖ngAnimate。

与您使用定义应用程序完全相同
angular.module("app", ['ui.bootstrap', 'ngRoute', 'ngGridPanel', 'ngAnimate'])

至于您的旁注2,似乎他们也已经将其配置为使用.classNameFilter()之类的东西,因此,如果库的用户决定像您那样进行其他配置,则动画不会中断。我对ngAnimate不太了解,所以这只是预感。

10-05 20:43