aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/ngClass.js10
-rw-r--r--test/ng/directive/ngClassSpec.js43
2 files changed, 51 insertions, 2 deletions
diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js
index a5b2acb6..0c4d23f0 100644
--- a/src/ng/directive/ngClass.js
+++ b/src/ng/directive/ngClass.js
@@ -42,12 +42,18 @@ function classDirective(name, selector) {
function removeClass(classVal) {
- $animate.removeClass(element, flattenClasses(classVal));
+ classVal = flattenClasses(classVal);
+ if(classVal && classVal.length > 0) {
+ $animate.removeClass(element, classVal);
+ }
}
function addClass(classVal) {
- $animate.addClass(element, flattenClasses(classVal));
+ classVal = flattenClasses(classVal);
+ if(classVal && classVal.length > 0) {
+ $animate.addClass(element, classVal);
+ }
}
function flattenClasses(classVal) {
diff --git a/test/ng/directive/ngClassSpec.js b/test/ng/directive/ngClassSpec.js
index e73713d8..b038c971 100644
--- a/test/ng/directive/ngClassSpec.js
+++ b/test/ng/directive/ngClassSpec.js
@@ -304,3 +304,46 @@ describe('ngClass', function() {
expect(e2.hasClass('odd')).toBeFalsy();
}));
});
+
+describe('ngClass animations', function() {
+ var body, element, $rootElement;
+
+ beforeEach(module('mock.animate'));
+
+ it("should avoid calling addClass accidentally when removeClass is going on",
+ inject(function($compile, $rootScope, $animate, $timeout) {
+
+ var element = angular.element('<div ng-class="val"></div>');
+ var body = jqLite(document.body);
+ body.append(element);
+ $compile(element)($rootScope);
+
+ expect($animate.queue.length).toBe(0);
+
+ $rootScope.val = 'one';
+ $rootScope.$digest();
+ $animate.process('addClass');
+ $animate.process('addClass');
+ $timeout.flush();
+ expect($animate.queue.length).toBe(0);
+
+ $rootScope.val = '';
+ $rootScope.$digest();
+ $animate.process('removeClass'); //only removeClass is called
+ expect($animate.queue.length).toBe(0);
+ $timeout.flush();
+
+ $rootScope.val = 'one';
+ $rootScope.$digest();
+ $animate.process('addClass');
+ $timeout.flush();
+ expect($animate.queue.length).toBe(0);
+
+ $rootScope.val = 'two';
+ $rootScope.$digest();
+ $animate.process('removeClass');
+ $animate.process('addClass');
+ $timeout.flush();
+ expect($animate.queue.length).toBe(0);
+ }));
+});