如何在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,图像和javascript等静态文件的资产?
TJB

是的,这实际上取决于您的设置。对我来说,我将资产与代码部分分开(通过为它们分配不同的Gulp任务),因此我将确切地知道资产在哪里。
哈里·宁

弗威,终于让哈利工作了。您使用完整路径是正确的。它不起作用的原因是我过去使用Photoshop时遇到的一个问题,而不是从那里正确导出图像。Argghhh Photoshoppppp!无论如何,谢谢哈里!
TJB

Answers:


109

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


1
感谢您的回答,对我有很大帮助。如果您能告诉我该文档在正式文档中的何处,我将不胜感激。
Ziv Glazer

使用angular-cli进行的Angular项目跟踪可以从.angular-cli.json文件中提供资产的位置。有关更多信息,请参见@michal-ambrož答案。
kevin.groat 17/09/11

1
谢谢!...当您与Angular一起玩了几个月,突然间您意识到自己不必添加单个图像了;-)
Simon_Weaver

“只有在将基本href标记设置为/的情况下,这才起作用”,如果我的基本href需要设置为其他路径,因为我的应用程序将在服务器的子目录中运行,那么我该怎么办?
吉尔斯

它将在该目录中找到资产文件夹,因此我认为不会有任何问题
Umar Younis

11

如果您不喜欢资产文件夹,则可以编辑.angular-cli.json和添加所需的其他文件夹。

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

3
为什么添加"assets": [ "assets", "assets/images", "favicon.ico" ],后仍然无法使用?
比拉斯


3

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

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

但是当您在开发中时,这行不通吗?
devN

2
@davaus可能是因为您已经进行了构建,所以您的旧“ dist”就坐在那里。如果更新映像,则在构建之前不会刷新它。
Simon_Weaver

那讲得通。谢谢。
davaus

1

只需将您的图片放在素材资源文件夹中,然后在具有该链接的html页面或ts文件中引用它们即可。


1

如果使用角度,则仅从服务器请求一页,即index.html。并且index.html和Assets文件夹在同一目录中。在将图片放入任何组件时给出src值,如assets\image.png。这将正常工作,因为浏览器将向服务器请求该图像,并且webpack将能够提供该图像。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.