How to load image (and other assets) in Angular an project?

HtmlAngularAngular Cli

Html Problem Overview


I'm pretty new to Angular so I'm not sure the best practice to do this.

I used angular-cli and ng new some-project to generate a new app.

In it created an "images" folder in the "assets" folder, so now my images folder is src/assets/images

In app.component.html (which is the root of my application), I put

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

When I do ng serve to view my web application, the image does not display.

What is the best practice to load up images in an Angular application?

EDIT: See answer below. My actual image name was using spaces, which Angular did not like. When I removed the spaces in the file name, the image displayed correctly.

Html Solutions


Solution 1 - Html

In my project I am using the following syntax in my app.component.html:

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

or

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

use [src] as a template expression when you are binding a property using interpolation:

<img [src]="imagePath" />

is the same as:

<img src={{imagePath}} />

Source: https://stackoverflow.com/questions/40797925/how-to-bind-img-src-in-angular-2-in-ngfor

Solution 2 - Html

I fixed it. My actual image file name had spaces in it, and for whatever reason Angular did not like that. When I removed the spaces from my file name, assets/images/myimage.png worked.

Solution 3 - Html

Angular-cli includes the assets folder in the build options by default. I got this issue when the name of my images had spaces or dashes. For example :

  • 'my-image-name.png' should be 'myImageName.png'
  • 'my image name.png' should be 'myImageName.png'

If you put the image in the assets/img folder, then this line of code should work in your templates :

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

If the issue persist just check if your Angular-cli config file and be sure that your assets folder is added in the build options.

Solution 4 - Html

Being specific to Angular2 to 5, we can bind image path using property binding as below. Image path is enclosed by the single quotation marks.

Sample example

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

Solution 5 - Html

Normally "app" is the root of your application -- have you tried app/path/to/assets/img.png?

Solution 6 - Html

1 . Add this line on top in component.

declare var require: any

2 . add this line in your component class.

imgname= require("../images/imgname.png");

3. add this 'imgname' in img src tag on html page.

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

Solution 7 - Html

You can follow the below steps in Angular 8+

Step 1: load the image as below in component

const logo = require('../assets/logo.svg').default as string;

@Component({
	selector: 'app-show-image',
	templateUrl: './app.component.html',
	styleUrls: ['./app.component.scss']
})
export class ShowImageComponent implements OnInit {

  logo = logo;
  constructor() { }
  ngOnInit() { }

}

step 2: Add the logic in html file

<img [src]="logo" [alt]="'logo'">

If launched without further configuration, you will see a strange error:

ERROR in src/app/app.component.ts(4,14): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i @types/node` and then add `node` to the types field in your tsconfig.

Do as suggested – add the @types/node typings to your project by running npm install @types/node and edit tsconfig.app.json to set:

"compilerOptions": {
	"types": ["node"],
    ...
}

For more info resource

Solution 8 - Html

for me "I" was capital in "Images". which also angular-cli didn't like. so it is also case sensitive.

Some web servers like IIS don't have problem with that, if angular application is hosted in IIS, case sensitive is not a problem.

Solution 9 - Html

It is always dependent on where is your html file that refers to the path of the static resource (in this case the image).

Example A:

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

As you can see, yourpage.html is one folder away from the root (src folder), for this reason it needs one amount of ../ to go back to the root then you can walk to the image from root:

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

Example B:

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

Here you have to go u in the tree by 2 folders:

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

Solution 10 - Html

Try not give space while loading the images.

Instead of

<img src='assets/img/myimage.png' alt="">     

try with string interpolation or Property Binding to load the source image as best practice.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3183717View Question on Stackoverflow
Solution 1 - HtmlmruanovaView Answer on Stackoverflow
Solution 2 - Htmluser3183717View Answer on Stackoverflow
Solution 3 - HtmljmuhireView Answer on Stackoverflow
Solution 4 - HtmlBhuwan MaharjanView Answer on Stackoverflow
Solution 5 - HtmlchrispyView Answer on Stackoverflow
Solution 6 - HtmlBheem SinghView Answer on Stackoverflow
Solution 7 - HtmlAnand RajaView Answer on Stackoverflow
Solution 8 - HtmlAnonymous CreatorView Answer on Stackoverflow
Solution 9 - HtmlsznczyView Answer on Stackoverflow
Solution 10 - HtmlRaxsiView Answer on Stackoverflow