16-3 Affichage de l'image
L'image du projet n'est pas affichée et il s'agit de la dernière étape afin d'avoir une liste complète contenant les propriétés importantes d'un projet.
Vérifier l'existence de l'image avec @if
et l'afficher
On peut vérifier l'existence de l'attribut image_url
et ne faire afficher l'image que si elle est présente à l'aide de la directive @if
.
Par exemple:
<img *ngIf="projet.image" src="{{projet.image[0].url}}" alt="Image du projet" />
Si vous avez une image pour un projet, vous obtiendrez quelque chose comme ceci:

Ajouter une image par défaut
Il est pratique courante d'afficher une image par défaut lorsqu'aucune image n'est fournie par l'utilisateur. Cela permet de garder le visuel cohérent en assumant qu'une image sera toujours affichée.
Pour cela, on pourrait ajouter un autre @if
qui teste la condition inverse et affiche une image par défaut dans le cas où aucune n'aurait été spécifiée. Ou encore, utiliser @else
sur la condition existante.
Ajouter une image au projet
Lorsque vous avez une image stockée localement que vous voulez rendre accessible à l'application, vous devez la mettre dans le dossier public
. En effet, le dossier public
contient les assets
statiques de l'application.
- Créer un dossier
images
sous le dossierpublic
- Déposez-y une image de votre choix pouvant être utilisée comme image par défaut
L'image par défaut que j'ai utilisé de mon côté est la suivante: https://i.imgur.com/LBBdeAu.png
Intégrer l'image par défaut au HTML
On peut utiliser un @if
avec @else
afin de faire afficher l'image contenue dans le dossier public/images
.
@if(projet.image_url) {
<img src="{{projet.image_url}}" alt="image du projet {{projet.nom}}">
} @else {
<img src="/images/projet-default.png" alt="Image par défaut, projet sans image">
}
Vous n'avez pas à inclure le dossier public
, Angular le chemin absolu /
comme étant la racine du dossier public
.
Vous devriez obtenir quelque chose comme:

Optimiser à l'aide d'un if
ternaire
Il est possible d'éviter la répétition de deux balises img
en utilisant plutôt un if
ternaire. En effet, on répète essentiellement la même balise deux fois pour une simple condition de présence d'un attribut. Parfois, on n'a pas le choix, mais ici on peut facilement optimiser sans perdre de clarté au niveau du code.
<img src="{{projet.image_url ? projet.image_url : '/images/projet-default.png'}}" alt="image du projet {{projet.nom}}">
Il est possible, entre les accolades permettant d'afficher des données {{ }}
d'apposer une condition tel un if ternaire pour afficher une valeur ou une autre.
Ici, si l'image existe dans le tableau, on retourne l'URL de cette dernière, sinon on prend l'URL de l'image par défaut.