Как загрузить изображение (и другие активы) в Angular проект?


108

Я новичок в Angular, поэтому не уверен, что лучше всего это сделать.

Я использовал angular-cli и ng new some-projectдля создания нового приложения.

В нем создана папка «изображения» в папке «активы», так что теперь папка с изображениями src/assets/images

В app.component.html(который является корнем моего приложения) я помещаю

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

Когда я ng serveпросматриваю свое веб-приложение, изображение не отображается.

Как лучше всего загружать изображения в приложение Angular?

РЕДАКТИРОВАТЬ: см. Ответ ниже. В моем фактическом имени изображения использовались пробелы, что не нравилось Angular. Когда я удалил пробелы в имени файла, изображение отображалось правильно.


1
да, вы правы, вы указали правильный синтаксис пути из набора ресурсов, может быть проблема с несоответствием вашего имени, проверьте, присутствует ли изображение или нет
Pardeep Jain

1
Определенно это не несоответствие имен, я закончил тем, что создал publicпапку вне srcи отобразил изображение с помощью<img class="img-responsive" src="../../public/images/myimage.png">
user3183717

Починил это. В моем фактическом имени файла изображения были пробелы, и по какой-то причине Angular это не понравилось. Когда я удалил пробелы из имени файла, assets/images/myimage.pngсработало.
user3183717

1
хорошо :) кстати, нет необходимости создавать дополнительную общую папку в обновленном кли, у них уже есть такие же имена.
Pardeep Jain

У меня аналогичная проблема с файлами с другими расширениями (например, .sgfя хочу разместить эти файлы и ссылаться на них из приложения, но, по-видимому, просто поместить их в assetsпапку недостаточно. Любые идеи ?
bvdb 08

Ответы:


74

Я починил это. В моем фактическом имени файла изображения были пробелы, и по какой-то причине Angular это не понравилось. Когда я удалил пробелы из имени файла, assets/images/myimage.pngсработало.


62

В моем проекте я использую следующий синтаксис в app.component.html:

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

или

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

используйте [src] как выражение шаблона, когда вы привязываете свойство с помощью интерполяции:

<img [src]="imagePath" />

такой же как:

<img src={{imagePath}} />

Источник: как связать img src в angular 2 в ngFor?


1
находится ли ваш app.component.html и папка с ресурсами на одном уровне?
Халил

Нет, структура папок создается автоматически, и у вас должны быть те же папки, что и у меня: project-folder \ src \ Assests \ и project-folder \ app \ app.component.html, если это поможет, проголосуйте за.
mruanova

26

Angular-cli по умолчанию включает папку с ресурсами в параметры сборки. У меня возникла эта проблема, когда в имени моих изображений были пробелы или тире. Например :

  • my-image-name.png должно быть myImageName.png.
  • 'my image name.png' должно быть 'myImageName.png'

Если вы поместите изображение в папку assets / img, то эта строка кода должна работать в ваших шаблонах:

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

Если проблема не устранена, просто проверьте, есть ли у вас файл конфигурации Angular-cli, и убедитесь, что папка с вашими ресурсами добавлена ​​в параметры сборки.


1
[alt] не требуется для строк, [] для привязки данных.
chris_r

14

Поскольку Angular2 является специфичным для 5, мы можем привязать путь к изображению, используя привязку свойств, как показано ниже. Путь к изображению заключен в одинарные кавычки.

Образец примера

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


в чем разница между src = "assets / img / klogo.png" и [src] = "'assets / img / klogo.png'"?
gdbj


поэтому в основном мы используем [src] для привязки к модели, если мы хотим иметь возможность изменять src с помощью этого метода.
gdbj

Спасибо, mohit, за ответ на тему. @gdbj Надеюсь, вы уже разобрались со своими проблемами.
Бхуван Махарджан

Я просто хотел бы указать будущим читателям, что они должны искать внутренние одинарные кавычки в первом комментарии gdbj. Их труднее увидеть в шрифте комментариев, чем в ответе выше, но их отсутствие может привести к некоторой путанице. (Может зависеть от вашего браузера, не уверен.)
SilithCrowe

7

Обычно «приложение» является корнем вашего приложения - вы пробовали app/path/to/assets/img.png?


angular-cli ставил appи assetsпапки отдельно под srcпапку. (извините, я не уверен, как мне отформатировать структуру и имена папок)
user3183717

6

1. Добавьте эту строку сверху в компоненте.

declare var require: any

2. добавьте эту строку в свой класс компонента.

imgname= require("../images/imgname.png");
  1. добавьте это imgname в тег img src на странице html.

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


это лучше для не плоских деревьев иерархии файлов.
chris_r

-1

для меня «Я» было главным в «Образах». что тоже не понравилось angular-cli. поэтому он также чувствителен к регистру.


Точно сказать не могу. почему людям нравится отрицательное голосование. Это была настоящая проблема, с которой я столкнулся. И все же отрицательно проголосовали. Интересно, почему некоторые из моих вопросов остаются без ответа, и люди не голосуют за их решение?
Анонимный создатель

-1

Это всегда зависит от того, где находится ваш html-файл, который ссылается на путь статического ресурса (в данном случае изображения).

Пример А:

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

Как видите, yourpage.html находится на расстоянии одной папки от корня (папка src), по этой причине для возврата к корню требуется одно количество ../, после чего вы можете перейти к изображению из корня:

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

Пример Б:

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

Здесь вам нужно пройти в дереве по 2 папкам:

<img class="img-responsive" src="../../assests/images/myimage.png">
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.