From 7c49b255483c0381c23de41d108800f93ebc1979 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 12 Apr 2010 19:05:39 -0700 Subject: $invalid widget clear on switch change --- src/services.js | 15 +++++++++++++++ src/widgets.js | 2 ++ 2 files changed, 17 insertions(+) (limited to 'src') diff --git a/src/services.js b/src/services.js index e2132f1c..e91a8eca 100644 --- a/src/services.js +++ b/src/services.js @@ -115,5 +115,20 @@ angularService("$invalidWidgets", function(){ }); return count; }; + invalidWidgets.clearOrphans = function() { + for(var i = 0; i < invalidWidgets.length;) { + var widget = invalidWidgets[i]; + if (isOrphan(widget[0])) { + invalidWidgets.splice(i, 1); + } else { + i++; + } + } + }; + function isOrphan(widget) { + if (widget == window.document) return false; + var parent = widget.parentNode; + return !parent || isOrphan(parent); + } return invalidWidgets; }); diff --git a/src/widgets.js b/src/widgets.js index f5f02813..b281ac2e 100644 --- a/src/widgets.js +++ b/src/widgets.js @@ -225,6 +225,8 @@ angularWidget('NG:SWITCH', function ngSwitch(element){ element.append(switchCase.element); childScope.$tryEval(switchCase.change, element); switchCase.template(switchCase.element, childScope); + if (scope.$invalidWidgets) + scope.$invalidWidgets.clearOrphans(); childScope.$init(); } }); -- cgit v1.2.3