我想知道如何解决以下问题:
我正在为GridLayout使用Syncfusion。如文档中所述,我将接收到的数据外部文件命名为datasource.ts:
//component.ts
//getting data from server
ngOnInit() {
this.user.someFunction().subscribe(data => {
this.datasource.data = data;
})
}
在我的html文件中,我使用该数据来构建网格:
<ej-grid id="Grid" #grid [dataSource]="datasource.data" allowPaging="true"
allowFiltering="true"
selectionType="single" allowSelection="true"
[selectionSettings]="selectionMode" (rowSelected)="rowSelected($event)"
(recordDoubleClick)="Doubleclick($event)">
<e-columns>
<e-column field="digit" headerText="Digits"></e-column>
</e-columns>
</ej-grid>
到目前为止,一切都很好。 我想映射我收到的数字(因为是数字),然后用相关的字符串替换它,例如:
1-“一个”, 2-“两个”,
这样,将显示字符串而不是接收到的数字,但似乎没有字。 我必须在通话中进行一些更改:
// in service
someFunction(): Observable<Data[]>{
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => data.map(order => this.orderadapter.adapt(data)
)));
}
但我不知道如何在此处放置另一个映射。 任何人都可以帮助一些(虚拟)代码吗?也许我的问题还有其他解决方案?
答案 0 :(得分:0)
只是一个简单的例子,数字上带有开关盒:1、2
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(digit => this.transform(digit));
})
transform(digit: number): string {
switch (digit) {
case 1: return 'One';
break;
case 2: return 'Two';
break;
default: return 'Not one or two';
}
}
这里是map docu
编辑:当您想保留对象并且只想变换一些属性时映射
this.user.someFunction().subscribe(data => {
this.datasource.data = data.map(data => data.digit = this.transform(data.digit));
})
...
答案 1 :(得分:0)
您可以尝试创建将数字转换为类似
的单词的函数inWords (num) {
var a = ['','one ','two ','three ','four ', 'five ','six ','seven ','eight ','nine ','ten ','eleven ','twelve ','thirteen ','fourteen ','fifteen ','sixteen ','seventeen ','eighteen ','nineteen '];
var b = ['', '', 'twenty','thirty','forty','fifty', 'sixty','seventy','eighty','ninety'];
if ((num = num.toString()).length > 9) return 'overflow';
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
if (!n) return; var str = '';
str += (n[1] != 0) ? (a[Number(n[1])] || b[n[1][0]] + ' ' + a[n[1][1]]) + 'crore ' : '';
str += (n[2] != 0) ? (a[Number(n[2])] || b[n[2][0]] + ' ' + a[n[2][1]]) + 'lakh ' : '';
str += (n[3] != 0) ? (a[Number(n[3])] || b[n[3][0]] + ' ' + a[n[3][1]]) + 'thousand ' : '';
str += (n[4] != 0) ? (a[Number(n[4])] || b[n[4][0]] + ' ' + a[n[4][1]]) + 'hundred ' : '';
str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (a[Number(n[5])] || b[n[5][0]] + ' ' + a[n[5][1]]) + 'only ' : '';
return str;
}
然后
return this.http.get<Data[]>(url).pipe(
map((data: any[]) => {
return data.map(d=>{
return {
this.inWords(yourdigitkey)//
}
})
}
)))