在Angular中,如何定义多个组件使用的一组通用函数/枚举?

在Angular中,如何定义多个组件使用的一组通用函数/枚举?,angular,enums,undefined,Angular,Enums,Undefined,我正在做一个包含几个组件的角度库。它们中的大多数都需要相同的枚举和函数。为了将其分解,我将所有公共函数/枚举放在一个公共模块中 文件组织 |- src/ |- common/ |- common.ts |- components/ |- component1.component.ts |- component2.component.ts ... 普通。ts module CommonTools { export enum FooEnum{

我正在做一个包含几个组件的角度库。它们中的大多数都需要相同的枚举和函数。为了将其分解,我将所有公共函数/枚举放在一个公共模块中

文件组织

|- src/
  |- common/
     |- common.ts
  |- components/
     |- component1.component.ts
     |- component2.component.ts
     ...
普通。ts

module CommonTools {
    export enum FooEnum{
        VALUE1 = <any>"Val 1",
        VALUE2= <any>"Val 2"
    }

    export function  dummy(){
        return true;
    }
}
/// <reference path="../common/common.ts"/>
import {Component, Input} from '@angular/core';
...
export class Component1 {
   @Input() attribute1: CommonTools.FooEnum;
   private attribute2: boolean;
   ...       
   constructor() {
       attribute1 = CommonTools.FooEnum.VALUE1;
       attribute2 = false;
   }

   ngOnInit(){
     attribute2 = CommonTools.dummy(); 
   }
}
export enum FooEnum{
    VALUE1 = <any>"Val 1",
    VALUE2= <any>"Val 2"
}

export function  dummy(){
    return true;
}
import {Component, Input} from '@angular/core';
import {FooEnum} from '../common/common'
import {dummy} from '../common/common'
...
export class Component1 {
   @Input() attribute1: FooEnum;
   private attribute2: boolean;
   ...       
   constructor() {
       attribute1 = FooEnum.VALUE1;
       attribute2 = false;
   }

   ngOnInit(){
     attribute2 = dummy(); 
   }
}
模块通用工具{
导出枚举FooEnum{
VALUE1=原因:未定义CommonTools“


你有办法解决这个问题吗?

我找到的最佳答案是避免包装枚举和函数,并在每个组件中逐个导入,如下所示:

普通。ts

module CommonTools {
    export enum FooEnum{
        VALUE1 = <any>"Val 1",
        VALUE2= <any>"Val 2"
    }

    export function  dummy(){
        return true;
    }
}
/// <reference path="../common/common.ts"/>
import {Component, Input} from '@angular/core';
...
export class Component1 {
   @Input() attribute1: CommonTools.FooEnum;
   private attribute2: boolean;
   ...       
   constructor() {
       attribute1 = CommonTools.FooEnum.VALUE1;
       attribute2 = false;
   }

   ngOnInit(){
     attribute2 = CommonTools.dummy(); 
   }
}
export enum FooEnum{
    VALUE1 = <any>"Val 1",
    VALUE2= <any>"Val 2"
}

export function  dummy(){
    return true;
}
import {Component, Input} from '@angular/core';
import {FooEnum} from '../common/common'
import {dummy} from '../common/common'
...
export class Component1 {
   @Input() attribute1: FooEnum;
   private attribute2: boolean;
   ...       
   constructor() {
       attribute1 = FooEnum.VALUE1;
       attribute2 = false;
   }

   ngOnInit(){
     attribute2 = dummy(); 
   }
}

它比导入所有枚举和函数(甚至是无用的枚举和函数)更有效在模块/提供程序中,但对开发人员来说不太实用,因为我们必须逐个导入它们。

您还没有导出CommonTools模块…为什么不将其作为提供程序呢?您不需要创建服务。只需在不使用包装器的情况下导出它们。也许您想要共享模块?请参阅官方文档。将共享模块导入主mo谢谢你的回答。我知道有几种可能性,但我不知道哪一种是最好的。我只想收集(用某种东西包装起来)为了在我的几个组件中使用它们,避免在所有xxx.component.ts.Provider?共享服务?或其他方式中复制它们,我不知道什么是最好的方法。