From 2428907259fa80ec3b1b4bfd85ea20028a9f4fa5 Mon Sep 17 00:00:00 2001 From: Di Peng Date: Thu, 7 Jul 2011 11:42:02 -0700 Subject: fix(ng:class): preserve classes added post compilation - make sure ng:class preserve classes added after compilation Closes #355 --- src/directives.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'src') 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); + }); + } }; }; } -- cgit v1.2.3