aboutsummaryrefslogtreecommitdiffstats
path: root/src/directives.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/directives.js')
-rw-r--r--src/directives.js25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/directives.js b/src/directives.js
index aa30fab2..00e6a1d7 100644
--- a/src/directives.js
+++ b/src/directives.js
@@ -568,18 +568,25 @@ angularDirective("ng:submit", function(expression, element) {
});
});
-
function ngClass(selector) {
return function(expression, element){
- var existing = element[0].className + ' ';
return function(element){
- this.$onEval(function(){
- if (selector(this.$index)) {
- var value = this.$eval(expression);
- if (isArray(value)) value = value.join(' ');
- element[0].className = trim(existing + value);
- }
- }, element);
+ if(selector(this.$index)) {
+ this.$watch(expression, function(newCls, oldCls) {
+ var cls = element.attr('class');
+ if (isArray(newCls)) newCls = newCls.join(' ');
+ if (isArray(oldCls)) oldCls = oldCls.join(' ');
+
+ // The time when newCls == oldCLs is when $watch just started
+ if (newCls == oldCls) {
+ cls += ' ' + newCls;
+ } else {
+ cls = cls.replace(' ' + oldCls, ' ' + newCls);
+ }
+
+ element.attr('class', cls);
+ });
+ }
};
};
}