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/compileSpec.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/compileSpec.js')
| -rwxr-xr-x | test/ng/compileSpec.js | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index c017bfa6..f2fa4ef6 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -969,6 +969,32 @@ describe('$compile', function() { }); }); + it('should resolve widgets after cloning in append mode without $templateCache', function() { + module(function($exceptionHandlerProvider) { + $exceptionHandlerProvider.mode('log'); + }); + inject(function($compile, $templateCache, $rootScope, $httpBackend, $browser, + $exceptionHandler) { + $httpBackend.expect('GET', 'cau.html').respond('<span>{{name}}</span>'); + $rootScope.name = 'Elvis'; + var template = $compile('<div class="cau"></div>'); + var e1; + var e2; + + e1 = template($rootScope.$new(), noop); // clone + expect(e1.text()).toEqual(''); + + $httpBackend.flush(); + + e2 = template($rootScope.$new(), noop); // clone + $rootScope.$digest(); + expect(e1.text()).toEqual('Elvis'); + expect(e2.text()).toEqual('Elvis'); + + dealoc(e1); + dealoc(e2); + }); + }); it('should resolve widgets after cloning in inline mode', function() { module(function($exceptionHandlerProvider) { @@ -1010,6 +1036,33 @@ describe('$compile', function() { }); }); + it('should resolve widgets after cloning in inline mode without $templateCache', function() { + module(function($exceptionHandlerProvider) { + $exceptionHandlerProvider.mode('log'); + }); + inject(function($compile, $templateCache, $rootScope, $httpBackend, $browser, + $exceptionHandler) { + $httpBackend.expect('GET', 'cau.html').respond('<span>{{name}}</span>'); + $rootScope.name = 'Elvis'; + var template = $compile('<div class="i-cau"></div>'); + var e1; + var e2; + + e1 = template($rootScope.$new(), noop); // clone + expect(e1.text()).toEqual(''); + + $httpBackend.flush(); + + e2 = template($rootScope.$new(), noop); // clone + $rootScope.$digest(); + expect(e1.text()).toEqual('Elvis'); + expect(e2.text()).toEqual('Elvis'); + + dealoc(e1); + dealoc(e2); + }); + }); + it('should be implicitly terminal and not compile placeholder content in append', inject( function($compile, $templateCache, $rootScope, log) { |
