Hello Hello
diff --git a/compiler/generate/index.js b/compiler/generate/index.js index f73b4a90b30c..68d7f36b2dfa 100644 --- a/compiler/generate/index.js +++ b/compiler/generate/index.js @@ -489,6 +489,10 @@ export default function generate ( parsed, source, options ) { state = {}; }; + this.appendChild = function appendChild ( child ) { + this.yield.appendChild(child); + } + ${initStatements.join( '\n\n' )} } ` ); diff --git a/compiler/generate/visitors/MustacheTag.js b/compiler/generate/visitors/MustacheTag.js index a7078e1e2815..e3dcca73d397 100644 --- a/compiler/generate/visitors/MustacheTag.js +++ b/compiler/generate/visitors/MustacheTag.js @@ -3,14 +3,25 @@ import deindent from '../utils/deindent.js'; export default { enter ( generator, node ) { const name = generator.current.counter( 'text' ); + const { snippet } = generator.contextualise( node.expression ); generator.addSourcemapLocations( node.expression ); - const { snippet } = generator.contextualise( node.expression ); - generator.addElement( name, `document.createTextNode( ${snippet} )`, true ); + if (node.expression.name === 'yield') { + if (generator.hasYield === undefined) { + generator.hasYield = true; + generator.current.initStatements.push( deindent` + component.yield = ${generator.current.target}; + ` ); + } else { + throw new Error( `Only one {{yield}} per component.` ); + } + } else { + generator.addElement( name, `document.createTextNode( ${snippet} )`, true ); - generator.current.updateStatements.push( deindent` - ${name}.data = ${snippet}; - ` ); + generator.current.updateStatements.push( deindent` + ${name}.data = ${snippet}; + ` ); + } } }; diff --git a/test/compiler/component-yield-one/_config.js b/test/compiler/component-yield-one/_config.js new file mode 100644 index 000000000000..e4d34ffdb6d9 --- /dev/null +++ b/test/compiler/component-yield-one/_config.js @@ -0,0 +1,5 @@ +export default { + compileError: function ( assert, err ) { + assert.equal('Error: Only one {{yield}} per component.', err) + } +}; diff --git a/test/compiler/component-yield-one/main.html b/test/compiler/component-yield-one/main.html new file mode 100644 index 000000000000..012a14c3efe2 --- /dev/null +++ b/test/compiler/component-yield-one/main.html @@ -0,0 +1,2 @@ +
{{yield}}
+{{yield}}
diff --git a/test/compiler/component-yield/Widget.html b/test/compiler/component-yield/Widget.html new file mode 100644 index 000000000000..2528571ca1cd --- /dev/null +++ b/test/compiler/component-yield/Widget.html @@ -0,0 +1 @@ + diff --git a/test/compiler/component-yield/_config.js b/test/compiler/component-yield/_config.js new file mode 100644 index 000000000000..0b2f9bebff5f --- /dev/null +++ b/test/compiler/component-yield/_config.js @@ -0,0 +1,8 @@ +export default { + html: '