diff options
Diffstat (limited to 'src/directives.js')
| -rw-r--r-- | src/directives.js | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/src/directives.js b/src/directives.js index 6fc19eaf..d800aa80 100644 --- a/src/directives.js +++ b/src/directives.js @@ -565,25 +565,18 @@ angularDirective("ng:submit", function(expression, element) { }); }); + function ngClass(selector) { return function(expression, element){ + var existing = element[0].className + ' '; return function(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); - }); - } + 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); }; }; } |
