Composant d'affichage dynamique qui genere des elements HTML repetitifs (cartes, tuiles, etc.)
a partir d'un template et d'une source de donnees.
Se connecte a un <dsfr-data-source>, <dsfr-data-query> ou
<dsfr-data-normalize> pour recevoir les donnees.
| Attribut | Type | Description |
|---|---|---|
source | String | ID de la source de donnees a ecouter (requis) |
cols | Number | Nombre de colonnes dans la grille (1-6, defaut: 1) |
pagination | Number | Nombre d'elements par page (0 = tout afficher) |
empty | String | Message quand aucune donnee (defaut: "Aucun resultat") |
gap | String | Classe CSS de gap pour la grille (defaut: "fr-grid-row--gutters") |
uid-field | String | Champ de donnees a utiliser comme identifiant unique par element (vide = index) |
url-sync | Boolean | Synchronise le numero de page dans l'URL via replaceState |
url-page-param | String | Nom du parametre URL pour la page (defaut: "page") |
| Syntaxe | Description |
|---|---|
{{champ}} | Valeur echappee (HTML-safe) |
{{{champ}}} | Valeur brute (non echappee) |
{{champ|defaut}} | Valeur avec fallback si null/undefined |
{{champ:number}} | Valeur avec separateurs de milliers (ex: 32073247 → 32 073 247) |
{{champ:number|0}} | Format number + fallback si null/undefined |
{{champ.sous.cle}} | Acces aux proprietes imbriquees |
{{$index}} | Index de l'element (0-based) |
{{$uid}} | Identifiant unique de l'element |
Affiche les donnees sous forme de cartes DSFR dans une grille a 3 colonnes.
Ministere : {{ministere}}
<dsfr-data-display source="sites" cols="3" pagination="6">
<template>
<div class="fr-card">
<div class="fr-card__body">
<div class="fr-card__content">
<h3 class="fr-card__title">{{nom}}</h3>
<p class="fr-card__desc">Ministere : {{ministere}}</p>
</div>
<div class="fr-card__footer">
<p class="fr-badge fr-badge--sm">RGAA : {{score_rgaa}}%</p>
</div>
</div>
</div>
</template>
</dsfr-data-display>
Affiche les donnees sous forme de tuiles dans une grille a 4 colonnes.
{{statut}}
Score DSFR : {{score_dsfr}}%
<dsfr-data-display source="sites" cols="4">
<template>
<div class="fr-tile">
<div class="fr-tile__body">
<div class="fr-tile__content">
<h3 class="fr-tile__title">{{nom}}</h3>
<p class="fr-tile__detail">{{statut}}</p>
<p class="fr-tile__desc">Score DSFR : {{score_dsfr}}%</p>
</div>
</div>
</div>
</template>
</dsfr-data-display>
Affiche une liste simple avec l'index de chaque element via {{$index}}.
{{ministere}} — Score RGAA : {{score_rgaa}}% | Score DSFR : {{score_dsfr}}%
<dsfr-data-display source="sites" cols="1" pagination="5">
<template>
<div class="fr-callout">
<h3 class="fr-callout__title">#{{$index}} -- {{nom}}</h3>
<p class="fr-callout__text">
{{ministere}} -- Score RGAA : {{score_rgaa}}%
</p>
</div>
</template>
</dsfr-data-display>
Utilise la syntaxe {{champ|defaut}} pour afficher une valeur de remplacement quand un champ est absent.
Categorie : {{categorie|Non renseignee}}
Statut : {{statut|Inconnu}}
<dsfr-data-display source="sites" cols="2" pagination="4">
<template>
<div class="fr-card fr-card--shadow">
<div class="fr-card__body">
<div class="fr-card__content">
<h3 class="fr-card__title">{{nom}}</h3>
<p class="fr-card__desc">
Categorie : {{categorie|Non renseignee}}
</p>
</div>
</div>
</div>
</template>
</dsfr-data-display>
Quand la source utilise paginate, dsfr-data-display detecte automatiquement
la pagination serveur. Chaque changement de page declenche un nouvel appel API au lieu de paginer en local.
Le nombre total de pages est calcule depuis les metadonnees de l'API (meta.total).
<dsfr-data-source id="elus"
url="https://tabular-api.data.gouv.fr/api/resources/.../data/"
paginate page-size="12">
</dsfr-data-source>
<dsfr-data-display source="elus" cols="3" pagination="12">
<template>
<div class="fr-card">
<div class="fr-card__body">
<div class="fr-card__content">
<h3 class="fr-card__title">{{Nom}} {{Prenom}}</h3>
<p class="fr-card__desc">{{Commune}}</p>
</div>
</div>
</div>
</template>
</dsfr-data-display>
Comportement : en mode pagination serveur, les donnees recues sont affichees telles quelles
(pas de slicing client). Le total affiche (ex: "1 743 pages") vient de meta.total / meta.page_size.
La recherche et le tri ne s'appliquent qu'aux donnees de la page courante.
Template : Le contenu du <template> est clone pour chaque element de donnees.
Utilisez n'importe quelle structure HTML DSFR (cartes, tuiles, callouts, badges...).
Performance : Pour les grands ensembles de donnees, utilisez l'attribut pagination
pour limiter le nombre d'elements rendus simultanement.
Securite : Les valeurs {{champ}} sont echappees par defaut (HTML-safe).
Utilisez {{{champ}}} (triple accolades) uniquement si vous faites confiance a la source de donnees.