Tôi đã xoay xở để làm việc gì đó, nó hơi bẩn và tà ác (với eval) nhưng nó thực sự là mánh khóe đối với tôi. Trong trường hợp của tôi, tôi có một thành phần bảng với các kiểu dữ liệu khác nhau trong mỗi hàng (ví dụ: tiêu đề, url, ngày tháng, trạng thái). Trong cơ sở dữ liệu của tôi, trạng thái được đánh dấu là 1
là enabled
hoặc 0
cho disabled
. Tất nhiên, nó là thích hợp hơn để được hiển thị kích hoạt/vô hiệu hóa cho người dùng của tôi. Ngoài ra, cột tiêu đề của tôi là đa ngôn ngữ, làm cho nó trở thành đối tượng có một hoặc là en
hoặc id
làm khóa của nó.
// Example row object:
title: {
"en": "Some title in English",
"id": "Some title in Indonesian"
},
status: 1 // either 1 or 0
Lý tưởng nhất, tôi cần 2 ống khác nhau để chuyển đổi dữ liệu để hiển thị cho người dùng ứng dụng của tôi. Một cái gì đó như translateTitle
và getStatus
sẽ hoạt động tốt. Hãy gọi đường ống của phụ huynh 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]
}
}
Tôi có thể sẽ rất ghét sử dụng eval. Hy vọng nó giúp!
Cập nhật: khi bạn có thể cần 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>
Sẽ trả lại:
| title | url | date | status |
| Some post t... a-beautiful... an hour ago enabled
| Some post ...2 a-beautifu...2 2 days ago disabled
là getpipe bộ lọc tùy chỉnh của bạn? –