Подтвердить что ты не робот

Angular 2 img src в относительном пути

Руководство по стилю johnpapa Angular 2 предлагает пошаговая настройка. Я получаю эту идею, вы можете создавать автономные компоненты Angular, которые можно использовать повторно.

Итак, я создал компонент, который хотел повторно использовать в другом проекте, и поместил его в свою собственную папку. Я также добавил изображение, которое я хотел, чтобы этот компонент отображался в одну и ту же папку, поэтому все это было само собой.

<img class="logo" src="logo.png"/>

Но это пытается затем загрузить изображение из корня localhost:3000/logo.png.

Я полагаю, это означает, что я должен фактически использовать точный путь к изображению, но разве это не подрывает всю идею компонентов, которые могут быть повторно использованы в другом проекте другими людьми?

Предложения по этому поводу?

Изменить для пояснения Я использую структуру папок из Angular 2 quickstart, то есть моя корневая папка:

app/
node_modules/
index.html
package.json
tsconfig.json

Итак, даже если я использую заголовок пути /logo.png, он не работает. Я должен сделать app/header/logo.png. Это фактически абсолютный путь, и на самом деле работает одинаково, если я добавлю косую черту: "/app/header/logo.png". Все, что меньше полного пути, нарушает связь. Если кто-то захочет повторить его использование, он должен иметь ту же структуру папок.

Я думаю, это как раз то, как это работает, я только изучаю Angular 2, но, на мой взгляд, я должен иметь возможность загружать активы из папки компонентов, как я могу, с помощью шаблона или css

4b9b3361

Ответ 1

Я использую webpack и смог преодолеть эту проблему require с изображением в компоненте как переменной и используя это в своем шаблоне.

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


Пример

Использование следующей структуры каталогов

app/
    header/
        header.component.ts
        header.component.html
        assets/
            logo.png
...

header.component.ts

...
@Component({
    selector: 'header',
    templateUrl: './header.component.html', // Auto required by webpack
})
export class HeaderComponent {
    private LOGO = require("./assets/logo.png");

    constructor() {};
}

header.component.html

<div>
    <img [src]="LOGO" />
</div>

По общему признанию, это связывает компонент и шаблон, но требование должно быть в компоненте, чтобы webpack мог анализировать и загружать его при связывании.


При таком подходе я упаковал свой модуль с помощью npm и установил его и использовал в другом проекте, который также использует webpack.

Я еще не тестировал SystemJS.

Ответ 2

Я решил бы эту проблему, разделив путь src на 2 части, например:

<img class="logo" src="{{imgPath + imgFileName}}" />

то внутри определения компонента вы устанавливаете:

@Input() imgPath:string = "app/header/";
imgFileName:string = "logo.png";

Используя декоратор @Input(), переменную imgPath можно увидеть извне, так что, если вы переместите компонент в другое место, вы можете установить другой путь, сделав компонент повторно используемым.

Ответ 3

Используйте папку с ресурсами в своем корне, содержащую изображение логотипа

Ответ 4

Если проблема связана с ошибкой 404, вам нужно изменить свой путь

из пути/изображения ( root/путь/образ, /путь/изображение и т.д.)

до ./путь/изображение

Затем он должен работать, если нет других проблем.

Ответ 5

Проверьте этот ответ: как обслуживать изображения в angular2

Ключ должен либо поместить его в папку "активы", либо отредактировать файл ".angular-cli.json" (раздел активов), чтобы указать местоположение, в котором находится изображение. Это справедливо и для других ресурсов, которые должны быть поданы, т.е. Таблиц стилей.