Skip to content

Commit f84ff52

Browse files
committed
fix(ngClass): ensure changes to nested object/arrays are detected
by marking the toClassString interceptorFn as $stateful Fixes angular#15905
1 parent ff0e611 commit f84ff52

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/ng/directive/ngClass.js

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
function classDirective(name, selector) {
1010
name = 'ngClass' + name;
11+
12+
// Mark toClassString as $stateful since it essentially adds state by
13+
// collapsing nested collections
14+
toClassString.$stateful = true;
15+
1116
var indexWatchExpression;
1217

1318
return ['$parse', function($parse) {

test/ng/directive/ngClassSpec.js

+13
Original file line numberDiff line numberDiff line change
@@ -567,6 +567,19 @@ describe('ngClass', function() {
567567
})
568568
);
569569

570+
it('should track changes of mutating object inside an array literal',
571+
inject(function($rootScope, $compile) {
572+
$rootScope.classVar = {orange: true};
573+
element = $compile('<div ng-class="[classVar]"></div>')($rootScope);
574+
575+
$rootScope.$digest();
576+
expect(element).toHaveClass('orange');
577+
578+
$rootScope.$apply('classVar.orange = false');
579+
expect(element).not.toHaveClass('orange');
580+
})
581+
);
582+
570583
describe('large objects', function() {
571584
var getProp;
572585
var veryLargeObj;

0 commit comments

Comments
 (0)