diff options
| author | Igor Minar | 2012-03-14 13:03:53 -0700 |
|---|---|---|
| committer | Igor Minar | 2012-03-14 14:33:20 -0700 |
| commit | 2315d9b3610994b36c44e4a97fb1427d59471ce8 (patch) | |
| tree | b8ac9c4204da71ab29e21eebe63af20f0ca6eccb /src/directive | |
| parent | 8fd1b748721a6312c9d4340744a012143e4d5ef2 (diff) | |
| download | angular.js-2315d9b3610994b36c44e4a97fb1427d59471ce8.tar.bz2 | |
fix(ng-switch): properly destroy child scopes
Diffstat (limited to 'src/directive')
| -rw-r--r-- | src/directive/ngSwitch.js | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/directive/ngSwitch.js b/src/directive/ngSwitch.js index 59c7056e..16b0c4d4 100644 --- a/src/directive/ngSwitch.js +++ b/src/directive/ngSwitch.js @@ -69,19 +69,21 @@ var ngSwitchDirective = valueFn({ element.data(NG_SWITCH, cases); return function(scope, element){ var selectedTransclude, - selectedElement; + selectedElement, + selectedScope; scope.$watch(watchExpr, function(value) { if (selectedElement) { + selectedScope.$destroy(); selectedElement.remove(); - selectedElement = null; + selectedElement = selectedScope = null; } if ((selectedTransclude = cases['!' + value] || cases['?'])) { scope.$eval(attr.change); - selectedTransclude(scope.$new(), function(caseElement, scope) { + selectedScope = scope.$new(); + selectedTransclude(selectedScope, function(caseElement) { selectedElement = caseElement; element.append(caseElement); - element.bind('$destroy', bind(scope, scope.$destroy)); }); } }); |
