Angular 2 img src in a relative path
johnpapa Angular 2样式指南建议采用逐个文件夹的方法。我的想法是,您可以使自包含的小角度组件可以重复使用。
因此,我做了一个要在另一个项目中重用的组件,并将其放在自己的文件夹中。我还添加了一个我希望该组件显示在同一文件夹中的图像,因此它们全部包含在内。
1 | <img class="logo" src="logo.png"/> |
但这会尝试从根
有什么建议吗?
编辑以澄清
我正在使用Angular 2快速入门中的文件夹结构,这意味着我的根文件夹是:
1 2 3 4 5 | app/ node_modules/ index.html package.json tsconfig.json |
因此,即使我使用路径header / logo.png,它也不起作用。我必须做app / header / logo.png。这实际上是一条绝对路径,并且如果我添加一个斜杠" /app/header/logo.png",实际上也同样有效。小于完整路径的任何内容都会断开链接。这意味着如果有人想重复使用此文件夹,则他们必须具有完全相同的文件夹结构。
我想这就是它的工作方式,我只是学习Angular 2,但在我看来,我应该能够像使用模板或CSS一样从components文件夹中加载资产
我正在使用webpack,并且能够通过
这是因为在捆绑阶段,Webpack将加载资源并存储正确的URL,并且在运行时调用require将获得此正确的URL传递给模板。
Example
使用以下目录结构
1 2 3 4 5 6 7 | app/ header/ header.component.ts header.component.html assets/ logo.png ... |
header.component.ts
1 2 3 4 5 6 7 8 9 10 | ... @Component({ selector: 'header', templateUrl: './header.component.html', // Auto required by webpack }) export class HeaderComponent { private LOGO = require("./assets/logo.png"); constructor() {}; } |
header.component.html
1 | <img [src]="LOGO" /> |
诚然,这绑定了组件和模板,但是需求需要包含在组件中,以便webpack能够在捆绑时对其进行分析和加载。
通过这种方法,我使用npm打包了模块,并在另一个项目中安装并使用了该项目-该项目也使用了webpack。
我尚未使用SystemJS进行测试。
我可以通过将src路径分为两部分来解决此问题,如下所示:
1 | <img class="logo" [src]="(imgPath + imgFileName)" /> |
然后,在组件定义中,设置:
1 2 | @Input() imgPath:string ="app/header/"; imgFileName:string ="logo.png"; |
通过使用@Input()装饰器,可以从外部看到imgPath变量,因此,如果将组件移到另一个位置,则可以设置其他路径,从而使组件可重用。
鉴于现在可以升级angular2,@ David的解决方案有些过时了,它适用于anular 2/3。对于角度为4及更高的角度,它将抛出要求未找到的错误,这就是我对其进行修改的方式,
header.component.ts
1 2 3 4 5 6 7 8 9 10 11 12 | ... declare var require: any; @Component({ selector: 'header', templateUrl: './header.component.html', // Auto required by webpack }) export class HeaderComponent { private LOGO = require("./assets/logo.png"); constructor() {}; } |
header.component.html
1 | <img [src]="LOGO" /> |
看看这个答案:如何在angular2中提供图像
关键是将其放入"资产"文件夹或编辑" .angular-cli.json"文件("资产"部分)以包括图像所在的位置。对于应该提供的其他资源(即样式表)也是如此。
如果问题是404错误,则需要更改路径
从路径/映像(根/路径/映像,/路径/映像等)
到./path/image
如果没有其他问题,它应该可以工作。
在根目录中使用资产文件夹,其中包含徽标图像