Angular:如何覆盖@Component()

时间:2018-01-11 09:40:47

标签: angular angular-cli angular2-aot

在我们的项目中,我们正在为不同的区域(比如内联网和互联网)构建相同的角度应用程序。在这些区域中唯一改变的是* .scss文件。为了能够有条件地添加scss文件,根据构建参数我开始覆盖@Component()之后:

https://stackoverflow.com/a/39755547/1053622

看起来像这样:

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

export interface ITargetAwareComponentProperties {
  selector: string;
  template?: string;
  templateUrl?: string;
  styles?: string[];
  styleUrls?: string[];
  directives?: any;
  providers?: any;
  encapsulation?: number;
  internetStyles?: string[];
  intranetStyles?: string[];
}

export function TargetAwareComponent(properties: ITargetAwareComponentProperties) {
  try {
    if (!properties.styles) {
      properties.styles = [];
    }

    if (environment.targetType === 'intranet' && properties.intranetStyles) {
      for (const style of properties.intranetStyles) {
        properties.styles.push(style);
      }
    }
    else if (properties.internetStyles) {
      for (const style of properties.internetStyles) {
        properties.styles.push(style);
      }
    }

  } catch (err) {
    console.warn(err);
  }

  return Component(properties);
}

这个工作正常,直到我想提前编译ng build --aot,我收到以下错误消息:

ERROR in : Unexpected value 'TextComponent' 
in /Users/.../components/text/text.component.ts' 
declared by the module 'AppCommonModule in /Users/.../common.module.ts'. 
Please add a @Pipe/@Directive/@Component annotation.

我猜这个角度没有理解@TargetAwareComponent()@Component(),因此无法正确编译/找到它。

我想真的不支持覆盖@Component()本身,对吗?

还有其他办法吗?

否则我需要在运行ng build --aot之前复制/移动/粘贴/删除* .scss文件

非常感谢帮助。

0 个答案:

没有答案