Les web components
Les web components
Que sont-ils ?
Que sont-ils ?
- Un ensemble de quatre principes :
- Templates
- Imports
- Custom elements
- Shadow DOM
- Une approche orientée composant
- Une norme
Que ne sont-ils pas ?
- Un framework
- Un module JS
- Une structure de projet
- Une difficulté
Les web components
Quoi ?
Quoi ?
- Templates
- Imports
- Custom elements
- Shadow DOM
Templates
- Revenir au bases du web : HTML & CSS
- L'améliorer avec des attributs dynamiques
- Modifier le DOM selon les configurations
- ⇒ Comme Angular, React…
Imports
- Dépendances entre les composants
- A la demande (Just needed & just in time)
- Peut (presque) remplacer les modules ES6
Custom elements
- Réutiliser les composants développés
- Les utiliser comme des composants natifs
Shadow DOM
- Encapsulation
- Mon composant est un élément du DOM
- Les enfants du template sont inaccessibles
- Les enfants du composant sont accessibles
Les web components
Pourquoi ? Quel intérêt ?
Pourquoi ? Quel intérêt ?
- Réutilisabilité
- Indépendant des frameworks et outils
- Utilisables dans les framework et outils
Et Angular, React, … ?
- Peut-on utiliser Angular dans React ?
- Peut-on utiliser React dans Angular ?
- Comment utiliser un « élément » existant ?
- Les web components sont naturellement compatibles
Les web components
Examples ?
Example 1
<link rel="import" href="/bower_components/polymer/polymer.html">
<link rel="import" href="/bower_components/kwc-i18n/kwc-i18n.html">
<link rel="import" href="/bower_components/kwc-callout/kwc-callout.html">
<!-- ... -->
<kwc-callout type="warning" closeable>
<!-- kwc-i18n converts given key into translated text from external JSON. -->
<p><kwc-i18n key="global.use-cookies" show></kwc-i18n></p>
</kwc-callout>
<!-- ... -->

Example 2
<link rel="import" href="/bower_components/polymer/polymer.html">
<link rel="import" href="/bower_components/kwc-table/kwc-table.html">
<link rel="import" href="/bower_components/kwc-i18n/kwc-i18n.html">
<link rel="import" href="/dist/lib/vep/services/show-service/show-service.html">
<link rel="import" href="/dist/lib/vep/services/company-service/company-service.html">
<dom-module id="page-shows">
<template>
<h1><kwc-i18n key="page-shows.title" show></kwc-i18n></h1>
<!-- Creates a table with [[shows]] as data -->
<kwc-table data="[[shows]]">
<!-- Defines the column which can be used to sort data -->
<kwc-table-column header="[[i18nTitle]]" property="title" sortable>
<!-- Defines how the cell will be rendered -->
<kwc-table-cell>
<template>
<a href="/show/read/[[row.canonical]]">[[value]]</a>
</template>
</kwc-table-cell>
</kwc-table-column>
<!-- Defines another column with default cell rendering -->
<kwc-table-column header="[[i18nAuthor]]" property="author" sortable></kwc-table-column>
<kwc-table-column header="[[i18nDirector]]" property="director" sortable></kwc-table-column>
<kwc-table-column header="[[i18nCompany]]" property="company" sortable>
<kwc-table-cell>
<template>
<!-- Calls a function into my component when rendering -->
{{getCompany(value)}}
</template>
</kwc-table-cell>
</kwc-table-column>
</kwc-table>
<kwc-i18n key="page-shows.table.title" var="{{i18nTitle}}"></kwc-i18n>
<kwc-i18n key="page-shows.table.author" var="{{i18nAuthor}}"></kwc-i18n>
<kwc-i18n key="page-shows.table.director" var="{{i18nDirector}}"></kwc-i18n>
<kwc-i18n key="page-shows.table.company" var="{{i18nCompany}}"></kwc-i18n>
</template>
<!-- In dev, I have two files, but my build system "inline" the script for prod version. -->
<script src="./page-shows.js" inline></script>
</dom-module>
Example 2
(function () {
const showService = window.vep.services.show;
const companyService = window.vep.services.company;
class PageShows {
beforeRegister() {
this.is = "page-shows";
this.properties = {
shows: {
type: Array,
value: []
},
companies: {
type: Array,
value: []
}
};
}
attached() {
const that = this;
showService.findAll().then((shows) => that.shows = shows);
companyService.findAll().then((companies) => that.companies = companies);
}
getCompany(companyCanonical) {
const company = this.companies.find((c) => c.canonical === companyCanonical);
return company ? company.name : null;
}
}
Polymer(PageShows);
})();
Example 2

Les web components
Conclusion
Conclusion
- N'est pas un framework
- Est une norme de ES
- Est utilisable par tous les outils
- Est simple d'utilisation
Les web components
Questions
Les web components
Les web components
By Gaëtan Rizio
Les web components
Que sont les web components ? Pourquoi existent-t-ils ? A quoi servent-ils ? Talk de 10 minutes lors des human talks Nantes d'Avril.
- 698