2016-10-25 21 views
40

Próbuję umieścić względną ścieżkę do jednego z moich obrazów w moim folderze zasobów w znaczniku src obrazu w mojej aplikacji Angular2. Ustawiłem zmienną w moim komponencie na "fullImagePath" i użyłem tego w moim szablonie. Próbowałem wielu różnych możliwych ścieżek, ale po prostu nie mogę uzyskać obrazu. Czy w Angular2 istnieje specjalna ścieżka, która zawsze jest względna w stosunku do statycznego folderu, takiego jak w Django?Jak wyświetlać obrazy w Angular2?

Komponent

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() { 
    } 

} 

umieścić również obraz w tym samym folderze co tego składnika, więc od szablonu i CSS w tym samym folderze, pracuje nie jestem pewien, dlaczego podobny względna ścieżka do obraz nie działa. To jest ten sam komponent z obrazem w tym samym folderze.

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> 

aplikacja drzewo * Wyszedłem na zewnątrz folder modułów węzła, aby zaoszczędzić miejsce

├── 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

Dlaczego chcesz użyć ścieżki względnej? Nie możemy ustawić go tak, aby uruchamiał się z katalogu głównego (np. 'This.fullImagePath = '/ assets/images/therealdealportfoliohero.jpg'') –

+0

Niestety to nie działało. W jaki sposób aplikacja wie, gdzie znajduje się root? Czy jest to katalog główny projektu, czy też zawsze są to zasoby dla plików statycznych, takich jak css, obrazy i javascript? – JBT

+0

Tak naprawdę to zależy od konfiguracji. Dla mnie oddzielam zasoby od części kodu (poprzez różne zadania dla nich), więc będę dokładnie wiedział, gdzie znajdują się te zasoby. –

Odpowiedz

56

kątowe tylko punkty do src/assets folderu, nic innego nie jest publiczny dostęp za pośrednictwem adresu URL więc powinieneś użyć pełnej ścieżki

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

Albo

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

ta będzie działać tylko wtedy, gdy tag href baza jest ustawiona z /

Note EDIT: komenda Dist spróbuje znaleźć wszystkie załączniki z aktywów tak ważne jest również, aby utrzymać obrazy i wszystkie pliki, do których chcesz uzyskać dostęp za pomocą zasobów wewnętrznych Url, takich jak fałszywe pliki danych JSON, również powinny znajdować się w zasobach.

+1

Dzięki za odpowiedź, bardzo mi to pomogło. Byłbym wdzięczny, gdybyś mógł mi powiedzieć, gdzie w oficjalnej dokumentacji jest to udokumentowane? –

+0

Projekty kątowe wykonane przy użyciu ścieżki kątowej, w której zasoby mogą być wyświetlane w pliku '.angular-cli.json'. Zobacz odpowiedź @ michal-ambrož, aby uzyskać więcej informacji. –

+0

Thx! ... gdy miesiącami bawisz się z Angularem i nagle uświadamiasz sobie, że nie musisz jeszcze dodawać ani jednego obrazu ;-) –

3

Dodaj ścieżkę do obrazu podobną do fullPathname='assets/images/therealdealportfoliohero.jpg' w swoim konstruktorze. To zadziała zdecydowanie.

2

Po prostu umieść swoje obrazy w folderze zasobów, odsyłaj je na swoje pliki html lub ts za pomocą tego linku.

6

Jeśli nie podoba Ci się folder aktywów, możesz edytować .angular-cli.json i dodawać inne potrzebne foldery.

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

Dlaczego, jeśli dodam "zasoby": "aktywa": "zasoby", " assets/images ", " favicon.ico " ]," to nadal nie działa? – bielas

1

Używam projektu szablonu kątowego Asp.Net Core z przednim końcem Angula 4 i plecakiem. Musiałem użyć "/ dist/assets/images /" przed nazwą obrazu i zapisać obraz w katalogu assets/images w katalogu dist. np .:

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

Ale kiedy jesteś w fazie rozwoju, to nie działa poprawnie? – devN

+0

Działa dobrze w fazie rozwoju. Spróbuj. – davaus

Powiązane problemy