diff options
Diffstat (limited to 'src/ng/directive/ngClass.js')
| -rw-r--r-- | src/ng/directive/ngClass.js | 23 |
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) { |
