Çalışırken bir şeyler elde etmeyi başardım, biraz kirli ve kötüydü (eval ile) ama benim için hile yapıyor. Benim durumumda, her satırda farklı veri türleri olan bir tablo bileşenim var (ör. Başlık, url, tarih, durum). Veritabanımda olarak enabled
olarak veya disabled
için 0
olarak işaretlenir. Tabii ki, kullanıcı için etkin/devre dışı gösterilmek daha tercih edilir. Ayrıca, başlık sütunum çok dillidir, bu da onu bir anahtar olarak en
veya id
ile bir nesne yapar.
// Example row object:
title: {
"en": "Some title in English",
"id": "Some title in Indonesian"
},
status: 1 // either 1 or 0
İdeal olarak, verilerimi uygulamamın kullanıcılarına gösterecek şekilde dönüştürmek için 2 farklı boruya ihtiyacım var. translateTitle
ve getStatus
gibi bir şey iyi durumda. Ebeveynin borusunu dynamicPipe
numaralı telefondan arayalım.
/// 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]
}
}
Muhtemelen eval kullanarak çok fazla nefret alacağım. Umarım yardımcı olur!
Güncelleme: Eğer zaman ihtiyacınız olacağını
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>
döndürür:
| title | url | date | status |
| Some post t... a-beautiful... an hour ago enabled
| Some post ...2 a-beautifu...2 2 days ago disabled
özel filtrenize mi geçiyor? –