aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIgor Minar2013-03-13 16:29:26 -0700
committerMisko Hevery2013-06-27 21:30:24 -0700
commit15e1a29cd08993b599f390e83a249ec17f753972 (patch)
treecaa9eb0204d123b0c3c2d2a427bc580beddfefda /src
parent344e195c60731f18529dacd35b478afb9dbeddf1 (diff)
downloadangular.js-15e1a29cd08993b599f390e83a249ec17f753972.tar.bz2
fix(compiler): corrects component transclusion on compilation root.
Closes# 2155
Diffstat (limited to 'src')
-rw-r--r--src/ng/compile.js20
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.