aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ng/directive/ngClass.js4
-rw-r--r--test/ng/directive/ngClassSpec.js11
2 files changed, 14 insertions, 1 deletions
diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js
index 79c55d7a..d731118f 100644
--- a/src/ng/directive/ngClass.js
+++ b/src/ng/directive/ngClass.js
@@ -3,6 +3,7 @@
function classDirective(name, selector) {
name = 'ngClass' + name;
return ngDirective(function(scope, element, attr) {
+ var oldVal = undefined;
scope.$watch(attr[name], ngClassWatchAction, true);
@@ -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 4a53030b..69afef7a 100644
--- a/test/ng/directive/ngClassSpec.js
+++ b/test/ng/directive/ngClassSpec.js
@@ -236,6 +236,17 @@ describe('ngClass', function() {
}));
+ it('should not mess up class value due to observing an interpolated class attribute', inject(function($rootScope, $compile) {
+ $rootScope.foo = true;
+ $rootScope.$watch("anything", function() {
+ $rootScope.foo = false;
+ });
+ element = $compile('<div ng-class="{foo:foo}"></div>')($rootScope);
+ $rootScope.$digest();
+ expect(element.hasClass('foo')).toBe(false);
+ }));
+
+
it('should update ngClassOdd/Even when model is changed by filtering', inject(function($rootScope, $compile) {
element = $compile('<ul>' +
'<li ng-repeat="i in items" ' +