mirror of
https://github.com/zhigang1992/angular.js.git
synced 2026-05-19 12:52:25 +08: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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user