-
Notifications
You must be signed in to change notification settings - Fork 146
Open
Description
In Angular and a multitude of other templating languages, it is possible to declare slots where templates can hold injected html, this is known as content projection, it is a method in which layout and content of layout are separated. This means that a template becomes extremely flexible and quick to refactor. I have found a very hacky way to do this currently (not practical in prod).
The workaround:
<sly data-sly-template.contentProjectionTest="${ @ FormInputSlot1, FormInputSlot2 }">
<form>
<div class='form-control-group-1'>
${FormInputSlot1 @context="html"}
</div>
<div class='form-control-group-2'>
${FormInputSlot2 @context="html"}
</div>
</form>
</sly>
<!--/* Hacky variables for html as a string */-->
<sly data-sly-test.injectedContentToSlot="${'
<label>creates a slot to inject content</label>
<input type=\'text\' value=\'Hello world\'>
'}"></sly>
<sly data-sly-test.injectedContentToSlot2="${'
<label>creates a slot to inject content</label>
<h1>varient</h1>
'}"></sly>
<!--/* render and inject */-->
<sly data-sly-call="${contentProjectionTest @
FormInputSlot1=injectedContentToSlot,
FormInputSlot2=injectedContentToSlot2
}"></sly>
This is less than ideal for several reasons
• Escaped quotes
• Markup as a string
• Involved setup
• No ability to have slot contents imported from files
I propose that the functionality could look like this:
<sly data-sly-template.contentProjectionTest>
<form>
<!--/*much more flexible template layout*/-->
<div class='form-control-group-1'>
<sly data-sly-slot="${contentProjectionTest @ FormInputSlot1}"/>
</div>
<div class='form-control-group-2'>
<sly data-sly-slot="${contentProjectionTest @ FormInputSlot2}"/>
</div>
</form>
</sly>
<sly data-sly-call="${contentProjectionTest}">
<sly data-sly-push="${contentProjectionTest @ FormInputSlot1}">
<label>creates a slot to inject content</label>
<input type=\'text\' value=\'Hello world\'>
</sly>
<sly data-sly-push"${contentProjectionTest @ FormInputSlot2}">
<label>creates a slot to inject content</label>
<h1>varient</h1>
</sly>
</sly>`
I'd love to hear your thoughts.
CodeByAlex and ConnorJamesLow
Metadata
Metadata
Assignees
Labels
No labels