Javascript 如何使用vanilla js在自包含的自定义元素中消除模板?
我有一个自定义组件,只显示塔罗牌。 在自定义元素之前,我定义了一个模板。Javascript 如何使用vanilla js在自包含的自定义元素中消除模板?,javascript,dom,web-component,custom-element,html5-template,Javascript,Dom,Web Component,Custom Element,Html5 Template,我有一个自定义组件,只显示塔罗牌。 在自定义元素之前,我定义了一个模板。 在我的wc的connectedCallback中,我将模板本身附加到shadowroot,然后通过在shadowroot中克隆模板将其压印出来。我这样做有两个原因: 我希望我的wc组件是一个独立的模块;因此,我希望在自定义元素所在的位置定义模板 这似乎是在不将模板粘贴到所有者文档中的情况下消除模板以使其可用的唯一方法 var tmpl = ` <template id="tmpl"> <h
在我的wc的connectedCallback中,我将模板本身附加到shadowroot,然后通过在shadowroot中克隆模板将其压印出来。我这样做有两个原因:
var tmpl = `
<template id="tmpl">
<h1 class="tarot-title"><slot name="title">NEED TITLE</slot>
</h1>
<img src="${this.imageurl}" alt="">
<p><slot name="subtitle">NEED A SUBTITLE</slot></p>
</template>`;
class BdTarot extends HTMLElement {
...constructor etc...
connectedCallback() {
this._shadowRoot.innerHTML = tmpl;
var _tmpl = this._shadowRoot.querySelector('#tmpl');
this._shadowRoot.appendChild(_tmpl.content.cloneNode(true));
}
}
customElements.define('bd-tarot', BdTarot);
var tmpl=`
需要头衔
需要字幕吗
`;
类BdTarot扩展了HtmleElement{
…构造函数等。。。
connectedCallback(){
这是。_shadowRoot.innerHTML=tmpl;
var#tmpl=this._shadowRoot.querySelector('#tmpl');
这个._shadowRoot.appendChild(_tmpl.content.cloneNode(true));
}
}
自定义元素。定义('bd-tarot',BdTarot);
(函数(){
var tmpl=`
需要头衔
需要字幕`;
类BdTarot扩展了HtmleElement{
构造函数(){
超级()
this.attachShadow({mode:'open'})
.innerHTML=tmpl;
}
}
自定义元素。定义('bd-tarot',BdTarot);
})()
女王
虽然我同意@Supersharp的说法,即模板文字和模板不应一起使用,但我认为有一种更好的方法来管理组件的HTML模板,可以在某种程度上混合使用您的方法
本质上,我们不应该处理字符串或模板文本,而应该定义一次模板
,然后在每个组件的实例创建时从那里注入它
const template=document.createElement('template');
template.innerHTML=`
需要头衔
需要字幕吗
`;
define('bd-tarot',类扩展HtmleElement{
构造函数(){
超级();
this.attachShadow({mode:'open'})
.appendChild(template.content.cloneNode(true));
}
})();
我写过类似的文章,还提到了我自己的库,它将上述大部分样板文件包装成了几个API