私は何か動作するように管理しましたが、それは少し汚いと悪い(評価付き)ですが、それは私のためのトリックを行います。私の場合は、各行に異なるデータ型のテーブルコンポーネント(タイトル、URL、日付、ステータスなど)があります。私のデータベースでは、ステータスは1
(enabled
)または0
(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
はカスタムフィルタを取得しますか? –