aboutsummaryrefslogtreecommitdiffstats
path: root/src/ng/directive/ngClass.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/ng/directive/ngClass.js')
-rw-r--r--src/ng/directive/ngClass.js23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/ng/directive/ngClass.js b/src/ng/directive/ngClass.js
index a0d23a28..10ef7fd1 100644
--- a/src/ng/directive/ngClass.js
+++ b/src/ng/directive/ngClass.js
@@ -21,9 +21,9 @@ function classDirective(name, selector) {
var mod = $index & 1;
if (mod !== old$index & 1) {
if (mod === selector) {
- addClass(scope.$eval(attr[name]));
+ addClass(flattenClasses(scope.$eval(attr[name])));
} else {
- removeClass(scope.$eval(attr[name]));
+ removeClass(flattenClasses(scope.$eval(attr[name])));
}
}
});
@@ -32,22 +32,33 @@ function classDirective(name, selector) {
function ngClassWatchAction(newVal) {
if (selector === true || scope.$index % 2 === selector) {
+ var newClasses = flattenClasses(newVal || '');
if (oldVal && !equals(newVal,oldVal)) {
- removeClass(oldVal);
+ var oldClasses = flattenClasses(oldVal);
+ var toRemove = tokenDifference(oldClasses, newClasses);
+ if(toRemove.length > 0) {
+ removeClass(toRemove);
+ }
+
+ var toAdd = tokenDifference(newClasses, oldClasses);
+ if(toAdd.length > 0) {
+ addClass(toAdd);
+ }
+ } else {
+ addClass(newClasses);
}
- addClass(newVal);
}
oldVal = copy(newVal);
}
function removeClass(classVal) {
- attr.$removeClass(flattenClasses(classVal));
+ attr.$removeClass(classVal);
}
function addClass(classVal) {
- attr.$addClass(flattenClasses(classVal));
+ attr.$addClass(classVal);
}
function flattenClasses(classVal) {