Angular2에서 이미지를 제공하는 방법은 무엇입니까?


80

Angular2 앱의 이미지 src 태그에있는 자산 폴더의 내 이미지 중 하나에 대한 상대 경로를 입력하려고합니다. 내 구성 요소의 변수를 'fullImagePath'로 설정하고 템플릿에서 사용했습니다. 여러 가지 가능한 경로를 시도했지만 내 이미지를 얻을 수없는 것 같습니다. Angular2에 Django와 같은 정적 폴더에 항상 상대적인 특수 경로가 있습니까?

구성 요소

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-hero',
  templateUrl: './hero.component.html',
  styleUrls: ['./hero.component.css']
})

export class HeroComponent implements OnInit {
  fullImagePath: string;

  constructor() {
    this.fullImagePath = '../../assets/images/therealdealportfoliohero.jpg'
  }

  ngOnInit() {
  }

}

또한이 구성 요소와 동일한 폴더에 그림을 넣었으므로 동일한 폴더의 템플릿과 CSS가 작동하기 때문에 이미지와 유사한 상대 경로가 작동하지 않는 이유를 잘 모르겠습니다. 이것은 동일한 폴더에있는 이미지와 동일한 구성 요소입니다.

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-hero',
  templateUrl: './hero.component.html',
  styleUrls: ['./hero.component.css']
})

export class HeroComponent implements OnInit {
  fullImagePath: string;

  constructor() {
    this.fullImagePath = './therealdealportfoliohero.jpg'
  }

  ngOnInit() {
  }

}

HTML

<div class="row">
    <div class="col-xs-12">
        <img [src]="fullImagePath">
    </div>
</div>

앱 트리 * 공간을 절약하기 위해 노드 모듈 폴더를 생략했습니다.

├── README.md
├── angular-cli.json
├── e2e
│   ├── app.e2e-spec.ts
│   ├── app.po.ts
│   └── tsconfig.json
├── karma.conf.js
├── package.json
├── protractor.conf.js
├── src
│   ├── app
│   │   ├── app.component.css
│   │   ├── app.component.html
│   │   ├── app.component.spec.ts
│   │   ├── app.component.ts
│   │   ├── app.module.ts
│   │   ├── hero
│   │   │   ├── hero.component.css
│   │   │   ├── hero.component.html
│   │   │   ├── hero.component.spec.ts
│   │   │   ├── hero.component.ts
│   │   │   └── portheropng.png
│   │   ├── index.ts
│   │   └── shared
│   │       └── index.ts
│   ├── assets
│   │   └── images
│   │       └── therealdealportfoliohero.jpg
│   ├── environments
│   │   ├── environment.dev.ts
│   │   ├── environment.prod.ts
│   │   └── environment.ts
│   ├── favicon.ico
│   ├── index.html
│   ├── main.ts
│   ├── polyfills.ts
│   ├── styles.css
│   ├── test.ts
│   ├── tsconfig.json
│   └── typings.d.ts
└── tslint.json

4
상대 경로를 사용하려는 이유는 무엇입니까? 우리는 루트에서 시작하는 (예를 설정할 수 없습니다 this.fullImagePath = '/assets/images/therealdealportfoliohero.jpg')
해리 닌

1
불행히도 작동하지 않았습니다. 응용 프로그램은 루트가 어디에 있는지 어떻게 알 수 있습니까? 프로젝트 루트입니까, 아니면 항상 CSS, 이미지 및 자바 스크립트와 같은 정적 파일의 자산입니까?
TJB

그래도 설정에 따라 다릅니다. 저에게는 애셋을 코드 부분에서 분리하므로 (다른 꿀꺽 꿀꺽 작업을 사용하여) 애셋이 어디에 있는지 정확히 알 수 있습니다.
Harry Ninh

Phwew, 마침내 해리가 작동하도록했습니다. 전체 경로를 사용하는 것이 옳았습니다. 작동하지 않는 이유는 포토샵을 사용할 때 과거에 있었던 문제 였고 거기에서 이미지를 올바르게 내 보내지 않았기 때문입니다. Argghhh Photoshoppppp! 어쨌든 고마워요 해리!
TJB

답변:


110

Angular는 src/assets폴더 만 가리키고 다른 것은 URL을 통해 액세스 할 수있는 공개되지 않으므로 전체 경로를 사용해야합니다.

 this.fullImagePath = '/assets/images/therealdealportfoliohero.jpg'

또는

 this.fullImagePath = 'assets/images/therealdealportfoliohero.jpg'

이것은 기본 href 태그가 다음과 같이 설정된 경우에만 작동합니다. /

에서 데이터에 대한 다른 폴더를 추가 할 수도 있습니다 angular/cli. 수정해야 할 것은angular-cli.json

"assets": [
 "assets",
 "img",
 "favicon.ico",
 ".htaccess"
]

편집 참고 사항 : Dist 명령은 자산에서 모든 첨부 파일을 찾으려고 시도하므로 모의 json 데이터 파일과 같이 자산 내부의 URL을 통해 액세스하려는 모든 파일과 이미지를 유지하는 것도 중요합니다.


1
답변 주셔서 감사합니다. 많은 도움이되었습니다. 공식 문서에서이 문서가 어디에 있는지 알려 주시면 감사하겠습니다.
Ziv Glazer

angular-cli로 만든 Angular 프로젝트는 .angular-cli.json파일 에서 자산을 제공 할 수있는 위치를 추적 합니다. 자세한 내용은 @ michal-ambrož 답변을 참조하십시오.
kevin.groat

1
고마워! 갑자기 개월 각도와 놀아 봤는데 때 ... 당신은 아직 하나의 이미지 ;-) 추가 할 수 없었 실현
Simon_Weaver

"기본 href 태그가 /로 설정된 경우에만 작동합니다."내 앱이 서버의 하위 디렉토리에서 실행되기 때문에 기본 href를 다른 경로로 설정해야하는 경우 어떻게해야합니까?
Gilles

너무 내 생각에는 문제가 없을 것 디렉토리에 폴더 자산을 발견 할 것이다
우마르 유니스

11

자산 폴더가 마음에 들지 않으면 .angular-cli.json필요한 다른 폴더를 편집 하고 추가 할 수 있습니다 .

  "assets": [
    "assets",
    "img",
    "favicon.ico"
  ]

3
추가 "assets": [ "assets", "assets/images", "favicon.ico" ],해도 여전히 작동하지 않는 이유는 무엇 입니까?
bielas

4

fullPathname='assets/images/therealdealportfoliohero.jpg'생성자에서 와 같이 이미지 경로를 추가하십시오 . 확실히 작동합니다.


3

Angular 4 프런트 엔드 및 웹팩과 함께 Asp.Net Core 각도 템플릿 프로젝트를 사용하고 있습니다. 이미지 이름 앞에 '/ dist / assets / images /'를 사용하고 dist 디렉터리의 assets / images 디렉터리에 이미지를 저장해야했습니다. 예 :

 <img  class="img-responsive" src="/dist/assets/images/UnitBadge.jpg">

하지만 개발 중일 때는 제대로 작동하지 않습니까?
devN

2
@davaus 아마도 당신이 이미 빌드를했기 때문에 당신의 오래된 '거리'가 거기에 앉아있을 것입니다. 이미지를 업데이트하면 빌드 할 때까지 새로 고쳐지지 않습니다.
Simon_Weaver

말이 되네요. 감사.
davaus

1

자산 폴더에 이미지를 넣으면 해당 링크가있는 html페이지 또는 ts파일 에서 참조 할 수 있습니다 .


1

각도에서는 index.html이라는 서버에서 한 페이지 만 요청됩니다. 그리고 index.html과 assets 폴더는 동일한 디렉토리에 있습니다. 모든 구성 요소에 이미지를 넣는 동안 assets\image.png. 브라우저가 해당 이미지를 서버에 요청하고 웹팩이 해당 이미지를 제공 할 수 있기 때문에 이것은 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.