diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/services.js | 15 | ||||
| -rw-r--r-- | src/widgets.js | 2 |
2 files changed, 17 insertions, 0 deletions
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(); } }); |
