From 9621ded8551a3a5a3dcb9b7522c02f30f22aec66 Mon Sep 17 00:00:00 2001 From: Martin Staffa Date: Mon, 23 Mar 2015 21:33:26 +0100 Subject: [PATCH 1/2] Revert "perf(ngStyleDirective): use $watchCollection" This reverts commit 4c8d8ad5083d9dd17c0b8480339d5f95943f1b71, because it broke lazy one-time binding for object literals (introduced in c024f28217cf8eedd695dd4b933ecf2ba4243c15) Fixes #11403 --- src/ng/directive/ngStyle.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ng/directive/ngStyle.js b/src/ng/directive/ngStyle.js index 72c7ce0e544a..16da9bec496b 100644 --- a/src/ng/directive/ngStyle.js +++ b/src/ng/directive/ngStyle.js @@ -47,10 +47,10 @@ */ var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watchCollection(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { + scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { if (oldStyles && (newStyles !== oldStyles)) { forEach(oldStyles, function(val, style) { element.css(style, '');}); } if (newStyles) element.css(newStyles); - }); + }, true); }); From 91b579ec282a1ebb2bbea3c1a8afda326adc69ed Mon Sep 17 00:00:00 2001 From: Martin Staffa Date: Mon, 23 Mar 2015 21:35:50 +0100 Subject: [PATCH 2/2] test(ngStyle): ensure lazy one-time binding is supported Closes #11405 --- test/ng/directive/ngStyleSpec.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/ng/directive/ngStyleSpec.js b/test/ng/directive/ngStyleSpec.js index 89056f539326..b531296d7c0f 100644 --- a/test/ng/directive/ngStyleSpec.js +++ b/test/ng/directive/ngStyleSpec.js @@ -23,6 +23,15 @@ describe('ngStyle', function() { })); + it('should support lazy one-time binding for object literals', inject(function($rootScope, $compile) { + element = $compile('
')($rootScope); + $rootScope.$digest(); + expect(element.css('height')).toBeFalsy(); + $rootScope.$apply('heightStr = "40px"'); + expect(element.css('height')).toBe('40px'); + })); + + describe('preserving styles set before and after compilation', function() { var scope, preCompStyle, preCompVal, postCompStyle, postCompVal, element;