我有一个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 issue,
ngAnimate
将假定所有内容都应设置动画。一旦意识到这是预期的行为,我就意识到我从来没有将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不太了解,所以这只是预感。