模块'AppModule'导入的意外值'[object Object]'

时间:2017-03-28 19:45:53

标签: angular typescript module

我想将管道模块导入我的应用

import { NgModule } from '@angular/core';
import { PipeTransform, Pipe } from '@angular/core';

@Pipe({ name: 'values',  pure: false })
export class PipeModule implements PipeTransform {
  transform(value: any, args: any[] = null): any {
    return Object.keys(value).map(key => value[key]);
  }

  static forRoot() {
      return {
          ngModule: PipeModule,
          providers: [],
      };
   }
}

这是我的管道模块

在我的 的 app.module.ts

imports: [
   ...,
    PipeModule.forRoot()

我像这样导入它,我收到此错误

Unexpected value '[object Object]' imported by the module 'AppModule

2 个答案:

答案 0 :(得分:13)

我得到了同样的错误(这是非常通用的),但出于完全不同的原因。

我的解决方案无法解决原始问题,但无论如何我都在这里写,以防有人遇到同样的问题:

在我的单元测试中,我意外地在provider数组中声明了imports对象而不是providers数组。这导致了这个问题。

答案 1 :(得分:0)

您的班级PipeModule未使用@NgModule装饰器进行装饰 - 因此它不是模块。因此,无法导入AppModule - 只允许导入@NgModules

根据您正在做的事情,您的第一个代码示例只是创建一个标准的Angular管道,因此请将该类的名称更改为ValuesPipe,以免误导。< / p>

此时,您有两种选择:您可以在ValuesPipe中声明新的AppModule,也可以创建一个全新的NgModule来存储新的ValuesPipe和然后将新NgModule导入您的AppModule

请注意,在下面的两个选项中,我们假设您已将第一个示例中的课程重命名为ValuesPipe

所以,选项1:

app.module.ts

declarations: [
  .....,
  ValuesPipe,
]

选项2:

创建一个新类 PipeModule ,如下所示:

@NgModule({
   imports: CommonModule,  (from @angular/core)
   declarations: ValuesPipe,
})
export class PipeModule { }

然后,在 app.module.ts

imports: [
  ......,
  PipeModule
]