CustomElementRegistry
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
A interface CustomElementRegistry
provê métodos para registro de elementos customizados e busca de elementos registrados. Para instancia-lo, use a propriedade window.customElements
.
Métodos
CustomElementRegistry.define()
-
Define um novo elemento customizado.
CustomElementRegistry.get()
-
Retorna o construtor do nome do elemento informado, ou
undefined
caso não tenha sido definido. CustomElementRegistry.whenDefined()
-
Retorna um
promise
vazio que é resolvido quando o elemento customizado é inserido. Se o elemento já foi definido, o retorno ja é informado.
Exemplos
O código a seguir foi pego do nosso word-count-web-component exemplo (veja em ação). Perceba que usamos o método CustomElementRegistry.define()
para definir um elemento customizado.
// Cria uma classe para o elemento
class WordCount extends HTMLParagraphElement {
constructor() {
// Sempre execute primeiro o método super
super();
// Conta as palavras no elemento pai
var wcParent = this.parentNode;
function countWords(node) {
var text = node.innerText || node.textContent;
return text.split(/\s+/g).length;
}
var count = "Words: " + countWords(wcParent);
// Cria um shadow root
var shadow = this.attachShadow({ mode: "open" });
// Cria um nó de texto e adiciona o contador de palavra nele
var text = document.createElement("span");
text.textContent = count;
// Acrescenta ao shadow root
shadow.appendChild(text);
// Atualiza o contador quando houver mudança
setInterval(function () {
var count = "Words: " + countWords(wcParent);
text.textContent = count;
}, 200);
}
}
// Define um novo elemento
customElements.define("word-count", WordCount, { extends: "p" });
Nota:
Note: The CustomElementsRegistry is available through the Window.customElements
property.
Especificações
Specification |
---|
HTML Standard # custom-elements-api |
Compatibilidade com navegadores
BCD tables only load in the browser