diff options
Diffstat (limited to 'src/ng/directive/ngSwitch.js')
| -rw-r--r-- | src/ng/directive/ngSwitch.js | 25 | 
1 files changed, 22 insertions, 3 deletions
| diff --git a/src/ng/directive/ngSwitch.js b/src/ng/directive/ngSwitch.js index 92594978..378c0b50 100644 --- a/src/ng/directive/ngSwitch.js +++ b/src/ng/directive/ngSwitch.js @@ -138,12 +138,31 @@ var ngSwitchDirective = ['$animate', function($animate) {        var watchExpr = attr.ngSwitch || attr.on,            selectedTranscludes,            selectedElements, +          previousElements,            selectedScopes = [];        scope.$watch(watchExpr, function ngSwitchWatchAction(value) { -        for (var i= 0, ii=selectedScopes.length; i<ii; i++) { -          selectedScopes[i].$destroy(); -          $animate.leave(selectedElements[i]); +        var i, ii = selectedScopes.length; +        if(ii > 0) { +          if(previousElements) { +            for (i = 0; i < ii; i++) { +              previousElements[i].remove(); +            } +            previousElements = null; +          } + +          previousElements = []; +          for (i= 0; i<ii; i++) { +            var selected = selectedElements[i]; +            selectedScopes[i].$destroy(); +            previousElements[i] = selected; +            $animate.leave(selected, function() { +              previousElements.splice(i, 1); +              if(previousElements.length === 0) { +                previousElements = null; +              } +            }); +          }          }          selectedElements = []; | 
