Formation Professionnelle
2024 - v1.0.0
Auteur : Noël Macé
Année de création : 2024 Contact :
contact@noelmace.com
Développeur / Architecte Senior Fullstack
Consultant-Formateur expert en développement Web
Expérience :
Motivations :
Contact : contact@noelmace.com
Custom Elements
Permet de définir des balises HTML personnalisées.
Shadow DOM
Fournit un encapsulage des styles et du DOM.
HTML Templates
Permet de créer des fragments HTML réutilisables.
HTML Imports (obsolète)
Charge des ressources HTML externes (non recommandé).
document.querySelector()element.setAttribute()XMLHttpRequestfetch()<template> :Contiennent du contenu HTML réutilisable.
Utilisent la balise <template> :
Sélectionner le template :
Cloner son contenu :
Ajouter au DOM :
Propose un DOM encapsulé pour les composants.
Les styles et le DOM interne ne fuient pas vers l’extérieur.
Exemple d’utilisation :
class StyledButton extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: 'open' });
shadow.innerHTML = `
<style>
.btn {
color: white;
background-color: blue;
border: none;
padding: 10px;
cursor: pointer;
}
.btn:hover {
background-color: darkblue;
}
</style>
<button class="btn">Cliquez-moi</button>
`;
}
}
customElements.define('styled-button', StyledButton);HTMLElement avec un comportement et des
styles propres.Définir une classe pour l’élément :
Enregistrer l’élément :
Une fois défini, l’élément peut être utilisé dans une page HTML :
connectedCallback : Appelé lorsque l’élément est inséré
dans le DOM.disconnectedCallback : Appelé lorsque l’élément est
retiré du DOM.attributeChangedCallback : Appelé lorsqu’un attribut de
l’élément change.class LifecycleElement extends HTMLElement {
connectedCallback() {
console.log('Element inséré dans le DOM');
}
disconnectedCallback() {
console.log('Element retiré du DOM');
}
static get observedAttributes() {
return ['data-example'];
}
attributeChangedCallback(name, oldValue, newValue) {
console.log(`Attribut ${name} changé de ${oldValue} à ${newValue}`);
}
}
// Enregistrement du Custom Element
customElements.define('lifecycle-element', LifecycleElement);
// Exemple d'utilisation dans le DOM
const element = document.createElement('lifecycle-element');
document.body.appendChild(element);
// Modification d'un attribut
element.setAttribute('data-example', 'test-value');
// Suppression de l'élément
document.body.removeChild(element);Element inséré dans le DOMAttribut data-example changé de null à test-valueElement retiré du DOMRéutilisabilité :
Encapsulation :
Interopérabilité :
Maintenance facilitée :
Performance :
Compatibilité :
Complexité initiale :
Créer un composant personnalisable pour afficher un message d’alerte.
class AlertBox extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
const type = this.getAttribute('type') || 'info';
const message = this.innerHTML;
this.shadowRoot.innerHTML = `
<style>
.alert {
padding: 10px;
margin: 5px 0;
border-radius: 4px;
}
.success { background-color: #d4edda; color: #155724; }
.error { background-color: #f8d7da; color: #721c24; }
.info { background-color: #d1ecf1; color: #0c5460; }
</style>
<div class="alert ${type}">
${message}
</div>
`;
}
}
customElements.define('alert-box', AlertBox);<alert-box> avec différents
types (success, error, info).React :
Utilisez un Custom Element comme une balise standard.
Exemple :
Vue.js :
Utilisez directement les Web Components dans les templates Vue.
Exemple :
Angular :
Activez schemas: [CUSTOM_ELEMENTS_SCHEMA] dans le
module Angular.
Exemple :