aboutsummaryrefslogtreecommitdiffstats
path: root/src/directives.js
diff options
context:
space:
mode:
authorDi Peng2011-07-07 11:42:02 -0700
committerIgor Minar2011-07-13 16:42:38 -0700
commit2428907259fa80ec3b1b4bfd85ea20028a9f4fa5 (patch)
treea61869d93e358fb21e264ba74ce2ae718d94c0da /src/directives.js
parent8a8a2cf4623708b69dba3816e22b01407e338b73 (diff)
downloadangular.js-2428907259fa80ec3b1b4bfd85ea20028a9f4fa5.tar.bz2
fix(ng:class): preserve classes added post compilation
- make sure ng:class preserve classes added after compilation Closes #355
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);
+ });
+ }
};
};
}