角度-传递管道为变量

时间:2018-11-07 22:24:47

标签: angular angular-pipe

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

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

我要实现的目标是将任何有效的管道信息作为变量(小数,百分比,日期,自定义等)传递。遵循一个简单的示例:

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>

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

错误错误:未捕获(承诺):错误:模板解析错误:分析器错误:意外的令牌'。'

1 个答案:

答案 0 :(得分:3)

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

这是@balu在this answer中创建的动态管道的示例。有关更多信息,请参见链接。

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);
        }
    }
}