aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorBrian Ford2013-10-30 14:51:02 -0700
committerBrian Ford2013-10-30 16:21:02 -0700
commite19067c9bbac3c3bb450c80f73eb5518bd0db1a1 (patch)
treee4e0220a67c2d0c57077ecdd4eedfd85e81c2b3a /test
parent9d0a69772c39bfc751ca2000c3b4b3381e51fe93 (diff)
downloadangular.js-e19067c9bbac3c3bb450c80f73eb5518bd0db1a1.tar.bz2
fix(ngIf): ngIf removes elements dynamically added to it
When using ngIf with ngInclude on the same element, ngIf previously did not remove elements added by ngInclude. Similarly, when using ngIfStart/End, ngIf will miss elements added between the start/end markers added after ngIf is linked. This commit changes the behavior of ngIf to add a comment node at the end of its elements such that elements between the starting comment and this ending comment are removed when ngIf's predicate does not hold.
Diffstat (limited to 'test')
-rwxr-xr-xtest/ng/directive/ngIfSpec.js37
1 files changed, 37 insertions, 0 deletions
diff --git a/test/ng/directive/ngIfSpec.js b/test/ng/directive/ngIfSpec.js
index 79eab6bb..509cf26d 100755
--- a/test/ng/directive/ngIfSpec.js
+++ b/test/ng/directive/ngIfSpec.js
@@ -60,6 +60,43 @@ describe('ngIf', function () {
expect(element.children().length).toBe(9);
});
+ it('should play nice with ngInclude on the same element', inject(function($templateCache) {
+ $templateCache.put('test.html', [200, '{{value}}', {}]);
+
+ $scope.value = 'first';
+ element.append($compile(
+ '<div ng-if="value==\'first\'" ng-include="\'test.html\'"></div>'
+ )($scope));
+ $scope.$apply();
+ expect(element.text()).toBe('first');
+
+ $scope.value = 'later';
+ $scope.$apply();
+ expect(element.text()).toBe('');
+ }));
+
+ it('should work with multiple elements', function() {
+ $scope.show = true;
+ $scope.things = [1, 2, 3];
+ element.append($compile(
+ '<div>before;</div>' +
+ '<div ng-if-start="show">start;</div>' +
+ '<div ng-repeat="thing in things">{{thing}};</div>' +
+ '<div ng-if-end>end;</div>' +
+ '<div>after;</div>'
+ )($scope));
+ $scope.$apply();
+ expect(element.text()).toBe('before;start;1;2;3;end;after;');
+
+ $scope.things.push(4);
+ $scope.$apply();
+ expect(element.text()).toBe('before;start;1;2;3;4;end;after;');
+
+ $scope.show = false;
+ $scope.$apply();
+ expect(element.text()).toBe('before;after;');
+ });
+
it('should restore the element to its compiled state', function() {
$scope.value = true;
makeIf('value');