使用类列表从JavaScript在web组件中动态添加类

使用类列表从JavaScript在web组件中动态添加类,javascript,web-component,shadow-dom,custom-element,Javascript,Web Component,Shadow Dom,Custom Element,如何向阴影DOM添加动态样式 index.html <!DOCTYPE html> <html> <head> <title>Document</title> <link rel="import" href="nav-component.html"> </head> <body> <app-nav></app-nav> </body> <

如何向阴影DOM添加动态样式

index.html

<!DOCTYPE html>
<html>
<head>
    <title>Document</title>
    <link rel="import" href="nav-component.html">
</head>
<body>
    <app-nav></app-nav>
</body>
</html>
必须将btn类添加到button元素,以便将其样式添加到button元素

出错 未捕获的TypeError:无法读取null的属性“classList”

首先,document.registerElement已被弃用,所以我在这里回答了基于类的自定义元素解决方案

解决方案是从document.currentScript.ownerDocument获取文档

更新:

要收听按钮元素,请仅使用connectedCallback thanks@bhv

connectedCallback() { 
    let btn = this.shadowRoot.querySelector('button') 
    // Event Listener 
    btn.addEventListener('click', e => this.changeStyle()); 
}
首先,document.registerElement已被弃用,所以我在这里回答了基于类的自定义元素解决方案

解决方案是从document.currentScript.ownerDocument获取文档

更新:

要收听按钮元素,请仅使用connectedCallback thanks@bhv

connectedCallback() { 
    let btn = this.shadowRoot.querySelector('button') 
    // Event Listener 
    btn.addEventListener('click', e => this.changeStyle()); 
}

您也可以简单地从event.target属性获取元素:

function changeStyle() {
    console.log('it works');
    event.target.classList.add('btn');
}

...

<button onclick="changeStyle()">ENTER</button>

您也可以简单地从event.target属性获取元素:

function changeStyle() {
    console.log('it works');
    event.target.classList.add('btn');
}

...

<button onclick="changeStyle()">ENTER</button>

谢谢@Raja-你能通过在html中添加事件来测试同一个应用程序吗ENTER@bhv在React或其他框架中是有办法的。但我不知道自定义元素。抱歉…这里的问题是,我们没有选择按钮元素。。this.addEventListener-选择整个模板..您能提到如何从app nav向按钮元素添加事件吗?模板可能有多个元素,如何从中选择按钮元素-抱歉问您更多问题:connectedCallback必须用于从shadowroot connectedCallback选择元素{let btn=this.shadowRoot.querySelector'button'//事件侦听器btn.addEventListener'click',e=>this.changeStyle;}谢谢@Raja-你能通过在html中添加事件来测试同一个应用程序吗ENTER@bhv在React或其他框架中是有办法的。但我不知道自定义元素。抱歉…这里的问题是,我们没有选择按钮元素..this.addEventListener-选择整个模板..您能提到如何从app nav a templat向按钮元素添加事件吗e可能有多个元素,如何从中选择button元素-很抱歉问您更多问题:connectedCallback必须用于从shadowroot connectedCallback中选择元素{let btn=this.shadowroot.querySelector'button'//事件侦听器btn.addEventListener'click',e=>this.changeStyle;}您不能不使用Jquery?$'buttonId'。addClass'btnClass'FYI,document.registerElement不推荐使用:您不能不使用Jquery?$'buttonId'。addClass'btnClass'FYI,document.registerElement不推荐使用:
function changeStyle() {
    console.log('it works');
    event.target.classList.add('btn');
}

...

<button onclick="changeStyle()">ENTER</button>