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 /test/ng/directive/ngIfSpec.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 'test/ng/directive/ngIfSpec.js')
| -rwxr-xr-x | test/ng/directive/ngIfSpec.js | 27 | 
1 files changed, 26 insertions, 1 deletions
| diff --git a/test/ng/directive/ngIfSpec.js b/test/ng/directive/ngIfSpec.js index 427bfd59..db923150 100755 --- a/test/ng/directive/ngIfSpec.js +++ b/test/ng/directive/ngIfSpec.js @@ -1,8 +1,11 @@  'use strict';  describe('ngIf', function () { -  var $scope, $compile, element; +  var $scope, $compile, element, $compileProvider; +  beforeEach(module(function(_$compileProvider_) { +    $compileProvider = _$compileProvider_; +  }));    beforeEach(inject(function ($rootScope, _$compile_) {      $scope = $rootScope.$new();      $compile = _$compile_; @@ -146,6 +149,28 @@ describe('ngIf', function () {      expect(element.children()[0].className).toContain('my-class');    }); +  it('should work when combined with an ASYNC template that loads after the first digest', inject(function($httpBackend, $compile, $rootScope) { +    $compileProvider.directive('test', function() { +      return { +        templateUrl: 'test.html' +      }; +    }); +    $httpBackend.whenGET('test.html').respond('hello'); +    element.append('<div ng-if="show" test></div>'); +    $compile(element)($rootScope); +    $rootScope.show = true; +    $rootScope.$apply(); +    expect(element.text()).toBe(''); + +    $httpBackend.flush(); +    expect(element.text()).toBe('hello'); + +    $rootScope.show = false; +    $rootScope.$apply(); +    // Note: there are still comments in element! +    expect(element.children().length).toBe(0); +    expect(element.text()).toBe(''); +  }));  });  describe('ngIf and transcludes', function() { | 
