【问题标题】:Unexpected value '[object Object]' imported by the module 'AppModule'模块“AppModule”导入的意外值“[object Object]”
【发布时间】:2017-03-28 19:45:52
【问题描述】:

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

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

【问题讨论】:

    标签: angular typescript module


    【解决方案1】:

    我遇到了同样的错误(这是非常普遍的),但原因完全不同。

    我的解决方案不能解决原来的问题,但我还是把它写在这里,以防有人遇到同样的问题:

    在我的单元测试中,我不小心在 imports 数组中声明了一个 provider 对象,而不是 providers 一个。这就是问题的根源。

    【讨论】:

      【解决方案2】:

      您的课程 PipeModule 没有使用 @NgModule 装饰器进行装饰 - 所以它不是一个模块。因此它不能被导入你的AppModule - 只有@NgModules 被允许被导入。

      根据您的操作,您的第一个代码示例只是创建一个标准的 Angular 管道,因此请将该类的名称更改为 ValuesPipe 之类的名称,以免产生误导。

      此时,您有两个选择:您可以在 AppModule 中声明您的新 ValuesPipe,或者您可以创建一个全新的 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
      ]
      

      【讨论】:

      • 感谢您的明确答复!我选择了声明部分,我发现它更容易实现
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 2018-10-10
      • 2019-09-12
      • 1970-01-01
      相关资源
      最近更新 更多