具有依赖注入的 Angular 2 自定义管道



假设我创建了一个这样的管道:

import { Pipe, PipeTransform } from '@angular/core';
import { CurrencyPipe } from '@angular/common';
@Pipe({
  name: 'awesomePipe'
})
export class AwesomePipe implements PipeTransform {
  constructor(private currency: CurrencyPipe){}
  transform(value: number) {
    return this.currency
      .transform(value.toString(), 'USD', true)
      .substring(0, 3) + 'bajillion dollars';
  }
}

然后将其注入到具有以下功能的组件中:

import { AwesomePipe } from '../pipes/awesome.pipe';
 ......
 ......
export class Awesome {
  awesomeness:[number] = [123123123123,32131231235,56465434565];
  constructor(private awesome: AwesomePipe){}
}

并用于:

template: `
<div class="foo">
  <custom-component
    [displayValues]="awesomeness.map(awesome.transform)"
  ></custom-component>
</div>
`,

在转换函数中失败:

VM8019:1 Uncaught ReferenceError: currency is not defined

在转换函数中添加调试器this显示为未定义。

为什么?我该如何解决这个问题?

我想当你将awesome-context绑定到awesome.transform方法时,你可以解决这个问题,如下所示:

template: `
<div class="foo">
  <custom-component
    [displayValues]="awesomeness.map(awesome.transform.bind(awesome))"
  ></custom-component>
</div>
`,

但实际上,当您实际想要显示转换后的值时,最好只在自定义组件中传递 awesomeness 值并使用管道。 这样,您就可以按照此处所述使用管道链接: https://angular.io/docs/ts/latest/guide/pipes.html#chaining-pipes

相关内容

  • 没有找到相关文章

最新更新