diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js index 79c55d7abdd6..70776ae3f303 100644 --- a/src/ng/directive/ngClass.js +++ b/src/ng/directive/ngClass.js @@ -3,12 +3,13 @@ function classDirective(name, selector) { name = 'ngClass' + name; return ngDirective(function(scope, element, attr) { + var oldVal; scope.$watch(attr[name], ngClassWatchAction, true); attr.$observe('class', function(value) { var ngClass = scope.$eval(attr[name]); - ngClassWatchAction(ngClass, ngClass); + ngClassWatchAction(ngClass); }); @@ -26,13 +27,14 @@ function classDirective(name, selector) { } - function ngClassWatchAction(newVal, oldVal) { + function ngClassWatchAction(newVal) { if (selector === true || scope.$index % 2 === selector) { if (oldVal && (newVal !== oldVal)) { removeClass(oldVal); } addClass(newVal); } + oldVal = newVal; } diff --git a/test/ng/directive/ngClassSpec.js b/test/ng/directive/ngClassSpec.js index 4a53030bd21f..3dd4d0e27d62 100644 --- a/test/ng/directive/ngClassSpec.js +++ b/test/ng/directive/ngClassSpec.js @@ -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(); @@ -278,4 +278,15 @@ describe('ngClass', function() { expect(e2.hasClass('even')).toBeTruthy(); expect(e2.hasClass('odd')).toBeFalsy(); })); + + it('should initialize classes correctly when $observe and $watch provide different initial values', + inject(function($rootScope, $compile) { + $rootScope.x = 'test'; + element = $compile( + '
')($rootScope); + $rootScope.$digest(); + expect(element.find('input').hasClass('error')).toBeFalsy(); + })); });