CSS样式未应用于自定义组件

时间:2019-09-19 13:39:40

标签: javascript css typescript web-component native-web-component

我创建了一个自定义Web组件(没有任何框架)。然后,我用模板标签中的内容填充它。

最后,我使用Javascript编辑内容。这很好。无效的是使用Javascript编辑样式。为什么会这样,以及如何使用代码在Web组件内编辑CSS?

class GeneratorView extends HTMLElement {

    connectedCallback() {

        // Use a template to fill this component
        const template = document.getElementById('generator-template')
        const templateContent = template.content
        this.appendChild(templateContent)

        // find the label tag in this component
        const label = this.querySelector("#label")

        // THIS WORKS - set the label text
        label.innerText = "The text has changed"

        // THIS DOESN'T WORK - set the label style
        label.style.border = "4px solid red;"
    }
}

customElements.define('generator-view', GeneratorView)

模板看起来像这样

<template id="generator-template">
        <div id="label">
            Change this text
        </div>
</template>

1 个答案:

答案 0 :(得分:1)

问题是您要在样式中添加分号。

分号仅由CSS解析器用来了解css值之间的间隔。在最后一个值之后不需要一个,并且在元素的style属性中设置值时不能使用它们。

我简化了您的代码以进行演示。

使用分号

const template = `<div id="label">Change this text</div>`;

class GeneratorView extends HTMLElement {
  connectedCallback() {
    this.innerHTML = template;
    const label = this.querySelector("#label");
    label.innerText = "The text has changed";
    label.style.border = "4px solid red;"
  }
}

customElements.define('generator-view', GeneratorView);
<generator-view></generator-view>

没有分号

const template = `<div id="label">Change this text</div>`;

class GeneratorView extends HTMLElement {
  connectedCallback() {
    this.innerHTML = template;
    const label = this.querySelector("#label");
    label.innerText = "The text has changed";
    label.style.border = "4px solid red";
  }
}

customElements.define('generator-view', GeneratorView);
<generator-view></generator-view>