slot - garevna/js-course GitHub Wiki
Классная фича, которая позволяет динамически изменять контент элемента
Поддержка в браузерах еще не полная, Edge пока догоняет вечнозеленые
|
Пример с именованным слотом Здесь все элементарно: В шаблоне разметки мы вставим именованный слот: <slot name="script">Default script</slot>Вставим шаблон со слотом в DOM: const template = document.body.appendChild (
document.createElement ( "template" )
)
template.innerHTML = `
<style>
.code { color: magenta; }
.div { border: inset 1px; padding: 10px 20px; }
</style>
<div class="div">
<p class="code"><slot name="script">Default script</slot></p>
</div>
`Теперь можно динамически изменять текст внутри слота Давайте для начала создадим кастомный элемент customElements.define( 'sample-element',
class extends HTMLElement {
constructor() {
super()
const shadowRoot = this.attachShadow({ mode: 'open' })
.appendChild( template.content.cloneNode(true) )
}
})Создадим переменную let codeText = `
function () {
console.log ( "Hello!" )
}`Теперь можно вставлять кастомный элемент на страницу с заданным контентом: document.body.appendChild (
document.createElement ( "sample-element" )
).appendChild(
(
text => {
let elem = document.createElement ( "pre" )
elem.setAttribute ( "slot", "script" )
elem.innerText = text
return elem
}
)( codeText )
)Вот и все! const template = document.body.appendChild (
document.createElement ( "template" )
)
template.innerHTML = `
<style>
.code { color: magenta; }
.div { border: inset 1px; padding: 10px 20px; }
</style>
<div class="div">
<p class="code"><slot name="script">Default script</slot></p>
</div>
`
customElements.define( 'sample-element',
class extends HTMLElement {
constructor() {
super();
const shadowRoot = this.attachShadow({mode: 'open'})
.appendChild( template.content.cloneNode(true) );
}
})
let codeText = `
function () {
console.log ( "Hello!" )
}`
document.body.appendChild (
document.createElement ( "sample-element" )
).appendChild(
(
text => {
let elem = document.createElement ( "pre" )
elem.setAttribute ( "slot", "script" )
elem.innerText = text
return elem
}
)( codeText )
) |
2 |
|---|
slot
1