I managed to get something working, it's a little dirty and spiteful (with eval), but it does the trick for me. In my case, I have a table component with different types of data in each row (e.g. name, URL, date, status). In my database, status is marked as 1 as enabled or 0 for disabled . Of course, itβs preferable to show my user on / off. In addition, my column header is multilingual, which makes it an object with en or id as the key.
// Example row object: title: { "en": "Some title in English", "id": "Some title in Indonesian" }, status: 1 // either 1 or 0
Ideally, I need 2 different channels to convert my data to show my user applications. Something like translateTitle and getStatus would be fine. Let the parent channel 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] } }
I probably get a lot of hate for using eval. Hope this helps!
Update: if you may need
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>
Will return:
| title | url | date | status | | Some post t... a-beautiful... an hour ago enabled | Some post ...2 a-beautifu...2 2 days ago disabled