aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/ngClass.js4
-rw-r--r--test/ng/directive/ngClassSpec.js18
2 files changed, 18 insertions, 4 deletions
diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js
index d731118f..09efe0c8 100644
--- a/src/ng/directive/ngClass.js
+++ b/src/ng/directive/ngClass.js
@@ -29,12 +29,12 @@ function classDirective(name, selector) {
function ngClassWatchAction(newVal) {
if (selector === true || scope.$index % 2 === selector) {
- if (oldVal && (newVal !== oldVal)) {
+ if (oldVal && !equals(newVal,oldVal)) {
removeClass(oldVal);
}
addClass(newVal);
}
- oldVal = newVal;
+ oldVal = copy(newVal);
}
diff --git a/test/ng/directive/ngClassSpec.js b/test/ng/directive/ngClassSpec.js
index 69afef7a..68c0fa4a 100644
--- a/test/ng/directive/ngClassSpec.js
+++ b/test/ng/directive/ngClassSpec.js
@@ -43,7 +43,7 @@ describe('ngClass', function() {
'expressions', inject(function($rootScope, $compile) {
var element = $compile(
'<div class="existing" ' +
- 'ng-class="{A: conditionA, B: conditionB(), AnotB: conditionA&&!conditionB}">' +
+ 'ng-class="{A: conditionA, B: conditionB(), AnotB: conditionA&&!conditionB()}">' +
'</div>')($rootScope);
$rootScope.conditionA = true;
$rootScope.$digest();
@@ -52,7 +52,7 @@ describe('ngClass', function() {
expect(element.hasClass('B')).toBeFalsy();
expect(element.hasClass('AnotB')).toBeTruthy();
- $rootScope.conditionB = function() { return true };
+ $rootScope.conditionB = function() { return true; };
$rootScope.$digest();
expect(element.hasClass('existing')).toBeTruthy();
expect(element.hasClass('A')).toBeTruthy();
@@ -61,6 +61,20 @@ describe('ngClass', function() {
}));
+ it('should remove classes when the referenced object is the same but its property is changed',
+ inject(function($rootScope, $compile) {
+ var element = $compile('<div ng-class="classes"></div>')($rootScope);
+ $rootScope.classes = { A: true, B: true };
+ $rootScope.$digest();
+ expect(element.hasClass('A')).toBeTruthy();
+ expect(element.hasClass('B')).toBeTruthy();
+ $rootScope.classes.A = false;
+ $rootScope.$digest();
+ expect(element.hasClass('A')).toBeFalsy();
+ expect(element.hasClass('B')).toBeTruthy();
+ }));
+
+
it('should support adding multiple classes via a space delimited string', inject(function($rootScope, $compile) {
element = $compile('<div class="existing" ng-class="\'A B\'"></div>')($rootScope);
$rootScope.$digest();