我设法让一些东西工作,它有点肮脏和邪恶(使用 eval)但它对我有用。在我的例子中,我有一个表格组件,每一行都有不同的数据类型(例如标题、网址、日期、状态)。在我的数据库中,状态标记为1asenabled或0for disabled。当然,最好向我的用户显示启用/禁用。此外,我的标题栏是多语言的,这使得它成为一个对象,en或者id作为它的键。
// Example row object:
title: {
    "en": "Some title in English",
    "id": "Some title in Indonesian"
},
status: 1 // either 1 or 0
理想情况下,我需要 2 个不同的管道来转换我的数据以显示给我的应用程序的用户。translateTitle类似的东西getStatus会做得很好。让我们调用父级的管道dynamicPipe。
/// some-view.html
{{ title | dynamicPipe:'translateTitle' }}
{{ status | dynamicPipe:'getStatus' }}
/// dynamic.pipe.ts
//...import Pipe and PipeTransform
@Pipe({name:'dynamicPipe'})
export class DynamicPipe implements PipeTransform {
    transform(value:string, modifier:string) {
        if (!modifier) return value;
        return eval('this.' + modifier + '(' + value + ')')
    }
    getStatus(value:string|number):string {
        return value ? 'enabled' : 'disabled'
    }
    translateTitle(value:TitleObject):string {
        // defaultSystemLanguage is set to English by default
        return value[defaultSystemLanguage]
    }
}
我可能会对使用 eval 感到非常讨厌。希望能帮助到你!
更新:当你可能需要它时
posts = {
    content: [
        {
            title:
                {
                    en: "Some post title in English",
                    es: "Some post title in Spanish"
                },
            url: "a-beautiful-post",
            created_at: "2016-05-15 12:21:38",
            status: 1
        },
        {
            title:
                {
                    en: "Some post title in English 2",
                    es: "Some post title in Spanish 2"
                },
            url: "a-beautiful-post-2",
            created_at: "2016-05-13 17:53:08",
            status: 0
        }
    ],
    pipes: ['translateTitle', null, 'humanizeDate', 'getStatus']
}
<table>
    <tr *ngFor="let row in posts">
        <td *ngFor="let column in row; let i = index">{{ column | dynamicPipe:pipes[i] }}</td>
    </tr>
</table>
将返回:
| title          | url            | date           | status         |
| Some post t...   a-beautiful...   an hour ago      enabled
| Some post ...2   a-beautifu...2   2 days ago       disabled