我有一个呈现子标签 counter.js 的父文件 index.js。每当子项中的属性发生更改时,都会触发一个事件,并且父项会监听它。为此,我必须在 index.html 中渲染两个标签,否则 index.js 无法侦听 querySelector 获取 Null 值。我想避免在 index.html 中使用 x-counter 标签。请查看以下链接中的文件: https ://stackblitz.com/edit/js-fxhcp8
这是我的3个文件:
//1) index.js (Parent)
class XApp extends PolymerElement {
constructor() {
super();
this.a = 15;
}
ready(){
console.log("Done");
super.ready();
document.querySelector('x-counter').addEventListener('valueChange',function(e){
console.log(e);
});
}
static get template() {
return html`
<x-counter></x-counter>
`;
}
}
customElements.define('x-app', XApp);
//2) counter.js (Child)
import { LitElement, html, property } from '@polymer/lit-element';
class XCounter extends LitElement {
static get properties() {
return {
value: { type: Number }
}
}
constructor() {
super();
this.value = 0;
}
render() {
return html`
<style>
button, p {
display: inline-block;
}
</style>
<button @click="${() => this.decrement()}" aria-label="decrement">-</button>
<p>${this.value}</p>
<button @click="${() => this.increment()}" aria-label="increment">+</button>
`;
}
decrement() {
this.value--;
this._valueChanged();
}
increment() {
this.value++;
this._valueChanged();
}
_valueChanged() {
this.dispatchEvent(new CustomEvent('valueChange', { detail: this.value }));
}
}
customElements.define('x-counter', XCounter);
//index.html
<!doctype html>
<html>
<body>
<!-- Error without the below tag-->
**<x-counter></x-counter>**
<br />
<x-app></x-app>
</body>
</html>