diff options
| author | Igor Minar | 2013-03-13 16:29:26 -0700 |
|---|---|---|
| committer | Misko Hevery | 2013-06-27 21:30:24 -0700 |
| commit | 15e1a29cd08993b599f390e83a249ec17f753972 (patch) | |
| tree | caa9eb0204d123b0c3c2d2a427bc580beddfefda /src/ng/compile.js | |
| parent | 344e195c60731f18529dacd35b478afb9dbeddf1 (diff) | |
| download | angular.js-15e1a29cd08993b599f390e83a249ec17f753972.tar.bz2 | |
fix(compiler): corrects component transclusion on compilation root.
Closes# 2155
Diffstat (limited to 'src/ng/compile.js')
| -rw-r--r-- | src/ng/compile.js | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/ng/compile.js b/src/ng/compile.js index caa4e8ce..36043a15 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -749,7 +749,7 @@ function $CompileProvider($provide) { newTemplateAttrs ) ); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); + mergeTemplateAttributes(templateAttrs, newTemplateAttrs, directive.name); ii = directives.length; } else { @@ -1007,15 +1007,16 @@ function $CompileProvider($provide) { * * @param {object} dst destination attributes (original DOM) * @param {object} src source attributes (from the directive template) + * @param {string} ignoreName attribute which should be ignored */ - function mergeTemplateAttributes(dst, src) { + function mergeTemplateAttributes(dst, src, ignoreName) { var srcAttr = src.$attr, dstAttr = dst.$attr, $element = dst.$$element; // reapply the old attributes to the new element forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { + if (key.charAt(0) != '$' && key != ignoreName) { if (src[key]) { value += (key === 'style' ? ';' : ' ') + src[key]; } @@ -1030,7 +1031,7 @@ function $CompileProvider($provide) { dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; } else if (key == 'style') { $element.attr('style', $element.attr('style') + ';' + value); - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { + } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key) && key != ignoreName) { dst[key] = value; dstAttr[key] = srcAttr[key]; } @@ -1073,14 +1074,19 @@ function $CompileProvider($provide) { tempTemplateAttrs = {$attr: {}}; replaceWith($rootElement, $compileNode, compileNode); collectDirectives(compileNode, directives, tempTemplateAttrs); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); + mergeTemplateAttributes(tAttrs, tempTemplateAttrs, origAsyncDirective.name); } else { compileNode = beforeTemplateCompileNode; $compileNode.html(content); } directives.unshift(derivedSyncDirective); - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn); + afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, childTranscludeFn, $compileNode); + forEach($rootElement, function(node, i) { + if (node == compileNode) { + $rootElement[i] = $compileNode[0]; + } + }); afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); @@ -1089,7 +1095,7 @@ function $CompileProvider($provide) { beforeTemplateLinkNode = linkQueue.shift(), linkRootElement = linkQueue.shift(), controller = linkQueue.shift(), - linkNode = compileNode; + linkNode = $compileNode[0]; if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { // it was cloned therefore we have to clone as well. |
