diff options
| author | Dhruv Manek | 2011-11-04 17:13:56 -0700 |
|---|---|---|
| committer | Igor Minar | 2011-11-08 02:25:22 -0800 |
| commit | e2663f62b0fbb8b9ce2e706b821a135e0bc7e885 (patch) | |
| tree | a019bc6348a5dc2af91be0ffbb8226abd1dd4412 /src/directives.js | |
| parent | 9f9ed4c5fff7a88e750131fed34dfd135c0922d2 (diff) | |
| download | angular.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.js | 20 |
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); }); }; }); |
