Nous sommes tous familiers avec les composants : la brique la plus puissante de l’écosystème Angular. Les composants sont l’endroit où le Dom est rendu, les services sont injectés, les vues sont rendues à nouveau avec la détection des changements. Les composants peuvent prendre des valeurs en entrée et déclencher des événements en sortie. Mais le problème est que, jusqu’à présent, ce magnifique bloc ne fonctionne qu’à l’intérieur d’un écosystème Angular. J’aimerais que nous puissions aider l’humanité en utilisant des composants angulaires même en dehors de l’écosystème angulaire.
Oui ! À partir de Angular 7, Angular apporte la fonctionnalité « Angular Element ». Maintenant, un composant angulaire peut être exporté comme un composant web autonome. Nous pouvons l’utiliser exactement comme une balise HTML typique comme div ou span, dans n’importe quelle page HTML, CMS ou même à l’intérieur d’un projet React ou Vue.js.
Comment ça marche:
Le composant Web est une norme Web permettant de définir un nouvel élément HTML personnalisé dans le navigateur. Les navigateurs maintiennent un registre appelé customElementRegistry . En utilisant la méthode CustomElementRegistry.define(), nous pouvons enregistrer une « chaîne dom » et une classe qui définit son comportement.
Le package @angular/elements d’Angular expose la méthode createCustomElement qui convertit le composant angulaire et ses dépendances en une classe compatible en tant que composant web.
À l’heure actuelle, la norme web est supportée par tous les navigateurs Chrome, Firefox, Safari et Opera. Nous pouvons également le rendre exploitable dans d’autres navigateurs en utilisant des polyfills.
Cas d’utilisation:
Il y a au moins 3 cas d’utilisation où nous pouvons faire usage de composants angulaires exportables entièrement fonctionnels comme composants web :
- Micro front end
- Migration de code Legacy
- Plug & play web components for third-party services
Micro front end:
Comme le micro-service, il existe un autre concept similaire appelé micro frontend. Dans une architecture micro-frontend, une petite équipe full-stack est chargée de livrer non seulement les API mais aussi leurs composants frontaux correspondants. Par exemple, l' »équipe produit » créera les API de produit et toutes les vues liées au produit utilisées dans les différentes pages de catégorie, la page de détail du produit, la page de paiement du panier &. Dans un cas comme celui-ci, toutes les équipes fourniront différents composants web et une équipe frontale ne fera que coller ces composants ensemble dans différentes pages.
Migration:
Projets écrits en Angular 1.x, la migration vers Angular a toujours été un défi. Il n’y a pas de mise à jour facile et magique de ng. La même chose est vraie pour un cas où quelqu’un veut migrer son projet vers Angular à partir de React ou Vue. Les composants Web sont la meilleure solution dans ce cas. Ils peuvent progressivement convertir leurs composants/contrôleurs existants en composants web Angular et les remplacer à partir du système existant. Une fois que tous les composants / contrôleurs sont convertis, ils peuvent simplement remplacer le système hérité par le dernier angular.
Services tiers:
Les fournisseurs de services peuvent fournir des composants web plug & play à coller dans le site Web de leur client sans aucune autre ingénierie nécessaire.
Donc, il semble que ce soit prometteur si nous pouvons effectivement expédier un composant angulaire en tant que composant web. Donc, faisons nos mains sales avec le codage réel.
Projet d’exemple:
Voici un exemple de code nous écrivons un composant web my-todo-list. FYI vous pouvez vérifier le code entier ici dans Github.
Etape 1 : Ecrire le composant et le service
- Un composant TodoList pour afficher une liste de todos.
- Un TodoService pour récupérer les todo à partir de placeholder JSON API.
- Le composant TodoList prendra « name » comme entrée.
- Le composant TodoList déclenchera l’événement onTodoComplete lorsqu’un todo sera marqué comme terminé.