Custom Elements
在自定义元素定义之前使用 js 创建的自定义元素需要调用 upgrade,插入文档中的不需要且会调用 constructor 和 connectedCallback
> Therefore redefining a custom element is disabled by the spec.
class Counter extends HTMLElement {x = 0;clicked() {this.x++;window.requestAnimationFrame(this.render.bind(this));}constructor() {super();this.onclick = this.clicked.bind(this);}connectedCallback() { this.render(); }render() {this.textContent = this.x.toString();}}window.customElements.define('num-counter', Counter);
自定义元素分为"自主自定义元素"和"自定义内置元素"
生命时期:
- connectedCallback:当 custom element 首次被插入文档DOM时,被调用。当使用 es6 modules(sync defer) 时可以在 constructor 中渲染 child element。
- disconnectedCallback:当 custom element 从文档DOM中删除时,被调用。
- adoptedCallback:当 custom element 被移动到新的文档时,被调用。
- attributeChangedCallback: 当 custom element 增加、删除、修改自身属性时,被调用。(先要监听: static get observedAttributes() {return ['w', 'l']; }) // 注意 connect 之前也会被调用