diff options
| author | Pete Bacon Darwin | 2013-04-16 12:29:56 +0100 |
|---|---|---|
| committer | Pete Bacon Darwin | 2013-04-16 13:22:37 +0100 |
| commit | 7898490779c2b2c359f1887c723ee260b3865639 (patch) | |
| tree | b05c0f5f83f44be5ba13cb388077ea8a3c09a9b8 /test | |
| parent | 0893e83c92108a057fff48a316b8a51dfec735ce (diff) | |
| download | angular.js-7898490779c2b2c359f1887c723ee260b3865639.tar.bz2 | |
fix(ngClass): should remove classes when object is the same but property has changed
If you wire up ngClass directly to an object on the scope, e.g. ng-class="myClasses",
where scope.myClasses = { 'classA': true, 'classB': false },
there was a bug that changing scope.myClasses.classA = false, was not being picked
up and classA was not being removed from the element's CSS classes.
This fix uses angular.equals for the comparison and ensures that oldVal is a copy of
(rather than a reference to) the newVal.
Diffstat (limited to 'test')
| -rw-r--r-- | test/ng/directive/ngClassSpec.js | 18 |
1 files changed, 16 insertions, 2 deletions
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(); |
