Ich schaffte es etwas zu arbeiten, es ist ein bisschen dreckig und böse (mit Eval), aber es macht den Trick für mich. In meinem Fall habe ich eine Tabellenkomponente mit verschiedenen Datentypen in jeder Zeile (z. B. Titel, URL, Datum, Status). In meiner Datenbank ist der Status als 1
als enabled
oder 0
für disabled
markiert. Natürlich ist es mehr vorzuziehen, meinem Benutzer "aktiviert/deaktiviert" zu zeigen. Außerdem ist meine Titelspalte mehrsprachig, was es zu einem Objekt mit entweder en
oder id
macht, wie es der Schlüssel ist.
Idealerweise brauche ich 2 verschiedene Rohre, um meine Daten zu konvertieren, um sie dem Benutzer meiner App anzuzeigen. Etwas wie translateTitle
und getStatus
wird gut tun. Lass uns die Pipe der Eltern anrufen 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]
}
}
Ich werde wahrscheinlich eine Menge Hass auf die Verwendung von Eval bekommen. Ich hoffe es hilft!
Update: wenn Sie es brauchen könnte
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>
Wir kommen wieder:
| title | url | date | status |
| Some post t... a-beautiful... an hour ago enabled
| Some post ...2 a-beautifu...2 2 days ago disabled
ist getpipe Ihren benutzerdefinierten Filter? –