Angular 8 将管道注入另一管道不起作用

问题描述 投票:0回答:2

从 Angular 7 升级到 Angular 8 后,我的 pipe 停止工作并出现错误:

    TypeError: undefined is not iterable (cannot read property Symbol(Symbol.iterator))

      10 | export class APipe implements PipeTransform {
      11 |
    > 12 |   constructor(
         |               ^
      13 |     private readonly bPipe: BPipe,
      14 |     private readonly cPipe: CPipe) {}

或类似错误:

Error: Found non-callable @@iterator

我的管道代码:

@Pipe({
  name: 'aPipe'
})
export class APipe implements PipeTransform {

  constructor(
    private readonly bPipe: BPipe,
    private readonly cPipe: CPipe) {}

  transform(someValue: any, args?: any): any {
    if (!someValue) {
      return ' — ';
    }

    if (cond1) {
      return this.bPipe.transform(someValue, ...args);
    }
    else {
      return this.cPipe.transform(someValue, ...args);
    }

    return ' — ';
  }

}

我是否必须在 Angular8 中将管道明确标记为

@Injectable()
或者有什么问题?

angular angular-pipe angular-dependency-injection
2个回答
3
投票

编辑

在您的模块中提供它:来源

管道不可注射。他们只是普通的课程。

这意味着,如果您想要将一个管道连接到另一个管道,则可以通过

来完成
const cPipe = new CPipe(...);


0
投票

已经通过文档链接给出了答案。这是完整的示例,以防有人需要。

您的模块中应提供需要注入某处的管道(很可能是

app.module.ts
)。它看起来像下面的例子:

@NgModule({
    declarations: [
        ...
        APipe,
        BPipe,
        CPipe,
    ],
    imports: [
        ...
    ],
    providers: [
        ...
        BPipe, // <-- provide pipe here
        CPipe, // <-- provide pipe here
    ],
    bootstrap: [AppComponent]
})
export class AppModule {}
© www.soinside.com 2019 - 2024. All rights reserved.