Angular CLI - 如何在可重用组件中引用图像路径

时间:2017-07-14 20:55:58

标签: image angular dependencies components angular-cli

需要帮助找出如何将图像包含在另一个应用程序中引用的可重用组件中。

例如,我有一个Angular App,我们称之为UI-Common,它包含公共组件和另一个Angular App,我们称之为Command-Center,它将使用这些常见组件。

在UI-Common中,有一个名为my-control.component的组件定义如下:

[我-control.component.html]

<div>
<img src="assets/images/myImage.png"/>
<div class"username" *ngIf="user">
    <p><strong>{{user.companyName}}</strong></p>
    <p>{{user.firstName + ' ' + user.lastName}}</p>
</div>

[我-control.component.ts]

import { Component, Input } from '@angular/core';

import { User } from '../../models/user';

@Component({
    selector: 'my-control',
    templateUrl: './my-control.component.html',
    styleUrls: ['./my-control.component.scss'],
})
export class MyControlComponent {
    @Input() user: User;

    constructor() {

    }
}

在Command-Center中,它将UI-Common添加为package.json中的依赖项。创建一个Command-Center组件并使用my-control.component,如下所示:

[app.module.ts]

...
import { HomeComponent } from './home/home.component';
import { MyControlComponent } from 'ui-common';

@NgModule({
   declarations: [
      ...,
      HomeComponent,
      MyControlComponent,
      ...
   ],
   ...
})
export class AppModule { }

[home.component.html]

<my-control [user]=user></my-control>
<div class="homeContent">
    blah blah blah...
</div>

[home.component.ts]

import { Component } from '@angular/core';

import { User } from 'ui-common';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent {
  user: User;

  constructor() {
    this.user = new User();
    this.user.companyName = 'iHeartMedia';
    this.user.firstName = 'John';
    this.user.lastName = 'Smith';
  }
}

问题是从Command-Center运行时my-control上的图像根本没有加载。这似乎是因为正在使用的图像路径&#34; assets / images / myImage.png&#34;在Command-Center中不存在。我不想在Command-Center的资源文件夹中保存图像的副本。如何正确处理公共组件中的图像?

2 个答案:

答案 0 :(得分:1)

找到此Angular CLI功能请求:https://github.com/angular/angular-cli/issues/3555

可以将Angular应用程序配置为将文件从相对文件路径复制到应用程序分发目录中的文件夹。这使我们可以从node_modules文件夹中访问图像,而无需手动将图像复制到本地资源文件夹中。

更新到最新版本的Angular CLI(1.2.1)后,我修改了我的angular-cli.json文件,如下所示:

{
...
"apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [
        "assets",
        "favicon.ico",
        "version.txt",
        {
          "glob": "**/*",
          "input": "../node_modules/ui-common/src/assets/images",
          "output": "./assets/images"
        }
      ],
...
}

现在,Command-Center应用程序可以访问UI-Common应用程序中的所有图像。

此处有关配置的更多详细信息:https://github.com/angular/angular-cli/wiki/stories-asset-configuration

答案 1 :(得分:0)

import {APP_BASE_HREF} from '@angular/common';

@NgModule({
  declarations: [ ... ],
  imports: [ ... ], 
  providers: [{provide: APP_BASE_HREF, useValue : '/' }]
]); 

我认为您需要对要使用图像的模块执行类似的操作。