aboutsummaryrefslogtreecommitdiffstats
path: root/src/directives.js
diff options
context:
space:
mode:
authorDhruv Manek2011-11-04 17:13:56 -0700
committerIgor Minar2011-11-08 02:25:22 -0800
commite2663f62b0fbb8b9ce2e706b821a135e0bc7e885 (patch)
treea019bc6348a5dc2af91be0ffbb8226abd1dd4412 /src/directives.js
parent9f9ed4c5fff7a88e750131fed34dfd135c0922d2 (diff)
downloadangular.js-e2663f62b0fbb8b9ce2e706b821a135e0bc7e885.tar.bz2
feat(ng:style): compatibility + perf improvements
- better compatibility with 3rd party code - we clober 3rd party style only if it direcrtly collides with 3rd party styles - better perf since it doesn't execute stuff on every digest - lots of tests
Diffstat (limited to 'src/directives.js')
-rw-r--r--src/directives.js20
1 files changed, 5 insertions, 15 deletions
diff --git a/src/directives.js b/src/directives.js
index f37cdde6..a806e928 100644
--- a/src/directives.js
+++ b/src/directives.js
@@ -802,21 +802,11 @@ angularDirective("ng:hide", function(expression, element){
</doc:scenario>
</doc:example>
*/
-angularDirective("ng:style", function(expression, element){
- // TODO(i): this is inefficient (runs on every $digest) and obtrusive (overrides 3rd part css)
- // we should change it in a similar way as I changed ng:class
- return function(element){
- var resetStyle = getStyle(element);
- this.$watch(function(scope){
- var style = scope.$eval(expression) || {}, key, mergedStyle = {};
- for(key in style) {
- if (resetStyle[key] === undefined) resetStyle[key] = '';
- mergedStyle[key] = style[key];
- }
- for(key in resetStyle) {
- mergedStyle[key] = mergedStyle[key] || resetStyle[key];
- }
- element.css(mergedStyle);
+angularDirective("ng:style", function(expression, element) {
+ return function(element) {
+ this.$watch(expression, function(scope, newStyles, oldStyles) {
+ if (oldStyles) forEach(oldStyles, function(val, style) { element.css(style, '');});
+ if (newStyles) element.css(newStyles);
});
};
});