【问题标题】:How to serve up images in Angular2?如何在 Angular2 中提供图像?
【发布时间】:2017-03-06 22:37:00
【问题描述】:

我正在尝试将我的一个图像的相对路径放在我的 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

【问题讨论】:

  • 为什么要使用相对路径?我们不能将它设置为从根开始(即this.fullImagePath = '/assets/images/therealdealportfoliohero.jpg'
  • 不幸的是,这不起作用。应用程序如何知道根在哪里?它是项目根目录,还是始终是 css、图像和 javascript 等静态文件的资产?
  • 是的,但这确实取决于您的设置。对我来说,我将资产从代码部分中分离出来(通过为它们分配不同的 gulp 任务),这样我就可以确切地知道资产在哪里。
  • Phwew,终于让它工作了,Harry。您使用完整路径是对的。它不工作的原因是我过去在使用 Photoshop 时遇到的一个问题,并且没有正确地从那里导出图像。 Argghhh Photoshoppppp !无论如何,谢谢哈利!

标签: html angular image typescript path


【解决方案1】:

你可以这样使用

用于 div 背景图片

<div style="min-height: fit-content;
background-image: url('/assets/Get-started-section.jpg'); background-size: cover; background-position:center;
width: 100%; ">
</div>

对于img

 <img src="/assets/Get-started-section.jpg"/>

【讨论】:

    【解决方案2】:

    在 Angular 中,仅从服务器请求一页,即 index.html。 index.html 和 assets 文件夹位于同一目录中。在将图像放入任何组件时,会给出 src 值,例如 assets\image.png。这将正常工作,因为浏览器将向服务器发出请求以获取该图像,而 webpack 将能够提供该图像。

    【讨论】:

      【解决方案3】:

      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 命令将尝试从 assets 中查找所有附件,因此将图像和您想通过 url 访问的任何文件保留在 assets 中也很重要,例如 mock json 数据文件也应该在 assets 中。

      【讨论】:

      • 感谢您的回答,对我帮助很大。如果您能告诉我官方文档中的哪个位置记录了此内容,我将不胜感激?
      • 使用 angular-cli 跟踪的 Angular 项目可以从 .angular-cli.json 文件中提供资产。有关更多信息,请参阅@michal-ambrož 答案。
      • 谢谢! ...当您使用 Angular 玩了几个月后,突然意识到您还不需要添加单个图像 ;-)
      • "这仅在基本 href 标记设置为 / 时才有效" 如果我​​的基本 href 需要设置到另一个路径,我需要做什么,因为我的应用程序将在服务器?
      • 它会在该目录中找到 assets 文件夹,所以我认为不会有问题
      【解决方案4】:

      只需将您的图片放在资产文件夹中,通过该链接将它们引用到您的 html 页面或 ts 文件中。

      【讨论】:

        【解决方案5】:

        在您的构造函数中添加您的图像路径,例如fullPathname='assets/images/therealdealportfoliohero.jpg'。它肯定会起作用。

        【讨论】:

          【解决方案6】:

          我正在使用带有 Angular 4 前端和 webpack 的 Asp.Net Core Angular 模板项目。我必须在图像名称前使用“/dist/assets/images/”,并将图像存储在 dist 目录中的 assets/images 目录中。 例如:

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

          【讨论】:

          • 但是当你在开发的时候,这行不通吗?
          • @davaus 可能是因为您已经进行了构建,所以您的旧“dist”只是坐在那里。如果您更新图像,在您构建之前它不会被刷新。
          • 这是有道理的。谢谢。
          【解决方案7】:

          如果您不喜欢 assets 文件夹,您可以编辑 .angular-cli.json 并添加您需要的其他文件夹。

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

          【讨论】:

          • 为什么我加了"assets": [ "assets", "assets/images", "favicon.ico" ],还是不行?
          猜你喜欢
          • 2020-05-05
          • 1970-01-01
          • 1970-01-01
          • 2020-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-04
          相关资源
          最近更新 更多