Angular - 将管道作为变量传递

Angular - pass pipe as variable

如何存储和使用来自变量的管道信息?

我已经搜索了很多,但找不到解决方案。

我想要实现的是将任何有效的管道信息作为变量(小数、百分比、日期、自定义等)传递。下面是一个简单的例子:

parent.component.ts:

columnsDef = {
  value: 0.35,
  pipeInfo: 'percent:"0.2-2":"pt-BR"'
};

parent.component html:

<app-display-component [columnsDef]="columnsDef"></app-display-component>

app-display.component html:

<h1> {{ columnsDef.value | columnsDef.pipeInfo }}</h1>

预期的输出是格式化为百分比的值,但我得到的只是模板解析错误:

错误错误:未捕获(承诺):错误:模板解析错误:解析器错误:意外的标记“.”

您可以创建一个自定义管道,将另一个管道作为参数并将其应用于给定的值。

这是@balu 在 中创建的动态管道示例。有关详细信息,请参阅 link。

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


@Pipe({
  name: 'dynamicPipe'
})
export class DynamicPipe implements PipeTransform {

    public constructor(private injector: Injector) {
    }

    transform(value: any, pipeToken: any, pipeArgs: any[]): any {
        if (!pipeToken) {
            return value;
        }
        else {
            let pipe = this.injector.get(pipeToken);
            return pipe.transform(value, ...pipeArgs);
        }
    }
}