diff options
Diffstat (limited to 'src/ng/directive')
| -rw-r--r-- | src/ng/directive/ngIf.js | 17 | ||||
| -rw-r--r-- | src/ng/directive/ngInclude.js | 12 | ||||
| -rw-r--r-- | src/ng/directive/ngSwitch.js | 25 |
3 files changed, 43 insertions, 11 deletions
diff --git a/src/ng/directive/ngIf.js b/src/ng/directive/ngIf.js index 000fba82..a31015b2 100644 --- a/src/ng/directive/ngIf.js +++ b/src/ng/directive/ngIf.js @@ -84,7 +84,7 @@ var ngIfDirective = ['$animate', function($animate) { restrict: 'A', $$tlb: true, link: function ($scope, $element, $attr, ctrl, $transclude) { - var block, childScope; + var block, childScope, previousElements; $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { if (toBoolean(value)) { @@ -102,14 +102,19 @@ var ngIfDirective = ['$animate', function($animate) { }); } } else { - - if (childScope) { + if(previousElements) { + previousElements.remove(); + previousElements = null; + } + if(childScope) { childScope.$destroy(); childScope = null; } - - if (block) { - $animate.leave(getBlockElements(block.clone)); + if(block) { + previousElements = getBlockElements(block.clone); + $animate.leave(previousElements, function() { + previousElements = null; + }); block = null; } } diff --git a/src/ng/directive/ngInclude.js b/src/ng/directive/ngInclude.js index 29e3abce..272e199a 100644 --- a/src/ng/directive/ngInclude.js +++ b/src/ng/directive/ngInclude.js @@ -177,15 +177,23 @@ var ngIncludeDirective = ['$http', '$templateCache', '$anchorScroll', '$animate' return function(scope, $element, $attr, ctrl, $transclude) { var changeCounter = 0, currentScope, + previousElement, currentElement; var cleanupLastIncludeContent = function() { - if (currentScope) { + if(previousElement) { + previousElement.remove(); + previousElement = null; + } + if(currentScope) { currentScope.$destroy(); currentScope = null; } if(currentElement) { - $animate.leave(currentElement); + $animate.leave(currentElement, function() { + previousElement = null; + }); + previousElement = currentElement; currentElement = null; } }; 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 = []; |
