mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-17 07:40:22 +00:00
fix($compile): don't terminate compilation for regular transclusion directives
Previously we would stop the compilation for both regular and element transclusion directives which was wrong. Only element transclusion directives should be terminal.
This commit is contained in:
parent
a27b4cf5fd
commit
fe2145016c
2 changed files with 27 additions and 2 deletions
|
|
@ -816,8 +816,9 @@ function $CompileProvider($provide) {
|
|||
if (directiveValue = directive.transclude) {
|
||||
assertNoDuplicate('transclusion', transcludeDirective, directive, $compileNode);
|
||||
transcludeDirective = directive;
|
||||
terminalPriority = directive.priority;
|
||||
|
||||
if (directiveValue == 'element') {
|
||||
terminalPriority = directive.priority;
|
||||
$template = groupScan(compileNode, attrStart, attrEnd)
|
||||
$compileNode = templateAttrs.$$element =
|
||||
jqLite(document.createComment(' ' + directiveName + ': ' + templateAttrs[directiveName] + ' '));
|
||||
|
|
|
|||
|
|
@ -2905,6 +2905,30 @@ describe('$compile', function() {
|
|||
expect(log).toEqual('pre(); post(unicorn!)');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('should terminate compilation only for element trasclusion', function() {
|
||||
module(function() {
|
||||
directive('elementTrans', function(log) {
|
||||
return {
|
||||
transclude: 'element',
|
||||
priority: 50,
|
||||
compile: log.fn('compile:elementTrans')
|
||||
};
|
||||
});
|
||||
directive('regularTrans', function(log) {
|
||||
return {
|
||||
transclude: true,
|
||||
priority: 50,
|
||||
compile: log.fn('compile:regularTrans')
|
||||
};
|
||||
});
|
||||
});
|
||||
inject(function(log, $compile, $rootScope) {
|
||||
$compile('<div><div element-trans log="elem"></div><div regular-trans log="regular"></div></div>')($rootScope);
|
||||
expect(log).toEqual('compile:elementTrans; compile:regularTrans; regular');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
|
@ -3256,7 +3280,7 @@ describe('$compile', function() {
|
|||
$rootScope.dataOnVar = 'data-on text';
|
||||
$rootScope.$apply();
|
||||
expect(element.attr('data-on')).toEqual('data-on text');
|
||||
|
||||
|
||||
element = $compile('<button on="{{onVar}}"></script>')($rootScope);
|
||||
$rootScope.onVar = 'on text';
|
||||
$rootScope.$apply();
|
||||
|
|
|
|||
Loading…
Reference in a new issue