diff options
| author | Tobias Bosch | 2013-11-26 19:55:02 -0800 |
|---|---|---|
| committer | Tobias Bosch | 2013-12-05 22:16:25 -0800 |
| commit | b0972a2e75909e41dbac6e4413ada7df2d51df3a (patch) | |
| tree | daefd834b62abcbe3ff970e2942cca16f67c491d /src/ng/directive/ngIf.js | |
| parent | 2dbb6f9a54eb5ff5847eed11c85ac4cf119eb41c (diff) | |
| download | angular.js-b0972a2e75909e41dbac6e4413ada7df2d51df3a.tar.bz2 | |
fix($compile): update cloned elements if the template arrives after the cloning
If an element has a directive whose content is loaded using `templateUrl`,
and the element is cloned using a linking function before the template arrives,
the clone needs to be updated as well.
This also updates `ngIf` and `ngRepeat` to keep the connection to the clone
of a tranclude function, so that they know about the changes a directive with
`templateUrl` does to the element in the future.
Fixes to #4930.
Diffstat (limited to 'src/ng/directive/ngIf.js')
| -rw-r--r-- | src/ng/directive/ngIf.js | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/ng/directive/ngIf.js b/src/ng/directive/ngIf.js index dcb3825d..a05d30d0 100644 --- a/src/ng/directive/ngIf.js +++ b/src/ng/directive/ngIf.js @@ -94,9 +94,12 @@ var ngIfDirective = ['$animate', function($animate) { if (!childScope) { childScope = $scope.$new(); $transclude(childScope, function (clone) { + clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); + // Note: We only need the first/last node of the cloned nodes. + // However, we need to keep the reference to the jqlite wrapper as it might be changed later + // by a directive with templateUrl when it's template arrives. block = { - startNode: clone[0], - endNode: clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ') + clone: clone }; $animate.enter(clone, $element.parent(), $element); }); @@ -109,7 +112,7 @@ var ngIfDirective = ['$animate', function($animate) { } if (block) { - $animate.leave(getBlockElements(block)); + $animate.leave(getBlockElements(block.clone)); block = null; } } |
