diff options
| author | Igor Minar | 2013-08-20 16:08:24 -0700 | 
|---|---|---|
| committer | Igor Minar | 2013-08-20 23:31:38 -0700 | 
| commit | bf79bd4194eca2118ae1c492c08dbd217f5ae810 (patch) | |
| tree | deca3f1e700eba811a226917fd18a6d994b33215 /test | |
| parent | 5c4ffb36deee18743beb149ceae4d63d5b1ae8d9 (diff) | |
| download | angular.js-bf79bd4194eca2118ae1c492c08dbd217f5ae810.tar.bz2 | |
fix(ngTransclude): make the transclusion available to parent post-link
previously the translusion was appended the the ngTranslude element via
$evalAsync which makes the transluded dom unavailable to parent
post-linking functions. By appending translusion in linking phase,
post-linking functions will be able to access it.
Diffstat (limited to 'test')
| -rwxr-xr-x | test/ng/compileSpec.js | 59 | 
1 files changed, 58 insertions, 1 deletions
| diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 28dc57fe..7c24e1d9 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -2823,10 +2823,67 @@ describe('$compile', function() {          expect(jqLite(element.find('span')[1]).text()).toEqual('T:true');        });      }); + + +    it('should make the result of a transclusion available to the parent directive in post-linking phase (template)', +        function() { +      module(function() { +        directive('trans', function(log) { +          return { +            transclude: true, +            template: '<div ng-transclude></div>', +            link: { +              pre: function($scope, $element) { +                log('pre(' + $element.text() + ')'); +              }, +              post: function($scope, $element) { +                log('post(' + $element.text() + ')'); +              } +            } +          }; +        }); +      }); +      inject(function(log, $rootScope, $compile) { +        element = $compile('<div trans><span>unicorn!</span></div>')($rootScope); +        $rootScope.$apply(); +        expect(log).toEqual('pre(); post(unicorn!)'); +      }); +    }); + + +    it('should make the result of a transclusion available to the parent directive in pre- and post- linking phase (templateUrl)', +        function() { +          // when compiling an async directive the transclusion is always processed before the directive +          // this is different compared to sync directive. delaying the transclusion makes little sense. + +      module(function() { +        directive('trans', function(log) { +          return { +            transclude: true, +            templateUrl: 'trans.html', +            link: { +              pre: function($scope, $element) { +                log('pre(' + $element.text() + ')'); +              }, +              post: function($scope, $element) { +                log('post(' + $element.text() + ')'); +              } +            } +          }; +        }); +      }); +      inject(function(log, $rootScope, $compile, $templateCache) { +        $templateCache.put('trans.html', '<div ng-transclude></div>'); + +        element = $compile('<div trans><span>unicorn!</span></div>')($rootScope); +        $rootScope.$apply(); +        expect(log).toEqual('pre(unicorn!); post(unicorn!)'); +      }); +    });    }); -  describe('img[src] sanitization', function($sce) { +  describe('img[src] sanitization', function() {      it('should NOT require trusted values for img src', inject(function($rootScope, $compile, $sce) {        element = $compile('<img src="{{testUrl}}"></img>')($rootScope);        $rootScope.testUrl = 'http://example.com/image.png'; | 
