Comment charger une image (et d'autres actifs) dans Angular un projet?


108

Je suis assez nouveau dans Angular, donc je ne suis pas sûr de la meilleure pratique pour le faire.

J'ai utilisé angular-cli et ng new some-project pour générer une nouvelle application.

Il a créé un dossier "images" dans le dossier "actifs", donc maintenant mon dossier d'images est src/assets/images

Dans app.component.html(qui est la racine de mon application), je mets

<img class="img-responsive" src="assets/images/myimage.png">

Quand je fais ng serve pour afficher mon application Web, l'image ne s'affiche pas.

Quelle est la meilleure pratique pour charger des images dans une application angulaire?

EDIT: Voir la réponse ci-dessous. Mon nom d'image réel utilisait des espaces, ce qu'Angular n'aimait pas. Lorsque j'ai supprimé les espaces dans le nom du fichier, l'image s'affichait correctement.


1
oui vous avez raison, vous avez donné la syntaxe de chemin correcte à partir du fodler d'actifs, peut-être un problème avec votre nom incompatible, vérifiez si l'image est présente ou non
Pardeep Jain

1
Certainement pas une incompatibilité de nom, j'ai fini par créer un publicdossier en dehors de srcet afficher l'image avec<img class="img-responsive" src="../../public/images/myimage.png">
user3183717

Corrigé. Mon nom de fichier image réel contenait des espaces, et pour une raison quelconque, Angular n'aimait pas ça. Lorsque j'ai supprimé les espaces de mon nom de fichier, cela a assets/images/myimage.pngfonctionné.
user3183717

1
bon :) btw pas besoin de créer un dossier public supplémentaire dans Cli mis à jour, ils ont déjà les mêmes noms nommés.
Pardeep Jain

J'ai un problème similaire avec les fichiers avec d'autres extensions (par exemple .sgf) Je veux héberger ces fichiers et les lier à partir de l'application, mais apparemment, simplement les mettre dans le assetsdossier ne suffit pas. Des idées ?
bvdb

Réponses:


73

Je l'ai corrigé. Mon nom de fichier image réel contenait des espaces, et pour une raison quelconque, Angular n'aimait pas ça. Lorsque j'ai supprimé les espaces de mon nom de fichier, cela a assets/images/myimage.pngfonctionné.


62

Dans mon projet, j'utilise la syntaxe suivante dans mon app.component.html:

<img src="/assets/img/1.jpg" alt="image">

ou

<img src='http://mruanova.com/img/1.jpg' alt='image'>

utilisez [src] comme expression de modèle lorsque vous liez une propriété à l'aide de l'interpolation:

<img [src]="imagePath" />

est le même que:

<img src={{imagePath}} />

Source: comment lier img src dans angular 2 dans ngFor?


1
votre dossier app.component.html et actifs est-il au même niveau?
Halil

Non, la structure des dossiers est créée automatiquement et vous devriez avoir les mêmes dossiers que moi: dossier-projet \ src \ assests \ et dossier-projet \ app \ app.component.html si cela vous aide, veuillez voter pour.
mruanova

26

Angular-cli inclut le dossier assets dans les options de construction par défaut. J'ai eu ce problème lorsque le nom de mes images avait des espaces ou des tirets. Par exemple :

  • 'my-image-name.png' doit être 'myImageName.png'
  • "mon nom d'image.png" doit être "monNomImage.png"

Si vous placez l'image dans le dossier assets / img, cette ligne de code devrait fonctionner dans vos modèles:

<img alt="My image name" src="./assets/img/myImageName.png">

Si le problème persiste, vérifiez simplement si votre fichier de configuration Angular-cli et assurez-vous que votre dossier de ressources est ajouté dans les options de construction.


1
[alt] n'est pas nécessaire pour les chaînes, [] est pour la liaison de données.
chris_r

14

Étant spécifique à Angular2 à 5, nous pouvons lier le chemin de l'image en utilisant la liaison de propriété comme ci-dessous. Le chemin de l'image est entouré de guillemets simples.

Exemple d'exemple

<img [src]="'assets/img/klogo.png'" alt="image">


quelle est la différence entre src = "assets / img / klogo.png" et [src] = "'assets / img / klogo.png'"?
gdbj


donc fondamentalement, nous utilisons [src] pour se lier au modèle si nous voulons pouvoir changer le src en utilisant cette méthode.
gdbj

Merci mohit d'avoir répondu au fil. @gdbj J'espère que vous avez réglé vos confusions maintenant.
Bhuwan Maharjan

Je voudrais juste signaler aux futurs lecteurs de rechercher les guillemets simples internes dans le premier commentaire de gdbj. Ils sont plus difficiles à voir dans la police des commentaires que dans la réponse ci-dessus, mais les manquer pourrait entraîner une certaine confusion. (
Cela

7

Normalement, "app" est la racine de votre application - avez-vous essayé app/path/to/assets/img.png?


angular-cli mettre appet assetsdossiers séparément sous le srcdossier. (désolé, je ne sais pas comment je suis censé formater la structure et les noms des dossiers)
user3183717

5

1 . Ajoutez cette ligne en haut dans le composant.

declare var require: any

2. ajoutez cette ligne dans votre classe de composants.

imgname= require("../images/imgname.png");
  1. ajoutez ce 'imgname' dans la balise img src sur la page html.

    <img src={{imgname}} alt="">


c'est mieux pour les arborescences de hiérarchie de fichiers qui ne sont pas plates.
chris_r

-1

pour moi "je" était capital dans "Images". ce qui n'aimait pas non plus angular-cli. il est donc également sensible à la casse.


-1

Cela dépend toujours de l'emplacement de votre fichier html qui fait référence au chemin de la ressource statique (dans ce cas, l'image).

Exemple A:

src
|__assests
   |__images
      |__myimage.png
|__yourmodule
   |__yourpage.html

Comme vous pouvez le voir, yourpage.html est à un dossier de la racine (dossier src), pour cette raison, il a besoin d'une quantité de ../ pour revenir à la racine, vous pouvez alors marcher jusqu'à l'image à partir de la racine:

<img class="img-responsive" src="../assests/images/myimage.png">

Exemple B:

src
|__assests
   |__images
      |__myimage.png
|__yourmodule
   |__yoursubmodule
      |__yourpage.html

Ici, vous devez vous rendre dans l'arborescence par 2 dossiers:

<img class="img-responsive" src="../../assests/images/myimage.png">
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.