доступ к вложенному объекту с помощью объекта уровня "n" с использованием квадратных скобок
Я хочу взять некоторый объект конфигурации, чтобы показать некоторые вложенные данные. Вот демонстрационный код
Как видно,
"customer.something"
это то, к чему мне нужно получить доступ. Теперь может быть N-уровень вложенности. Сетка позаботится об этом, используя
field='customer.something'
. Как сделать то же самое с моим
template
<e-column field='customer.something' headerText='Other' editType='dropdownedit' [edit]='editParams' width=120>
Вот HTML-файл:
<ejs-grid #Grid [dataSource]='data' allowSorting='true'>
<e-columns>
<ng-template #colTemplate ngFor let-column [ngForOf]="colList">
<e-column [field]='column.field' [headerText]='column.header' textAlign='Right' width=90>
<ng-template #template let-data>
{{data[column.field] | currency:'EUR'}} <-- want to fix this line
</ng-template>
</e-column>
</ng-template>
</e-columns>
</ejs-grid>
<!-- <ejs-grid #Grid [dataSource]='data' allowSorting='true'>
<e-columns>
<e-column field='price' isPrimaryKey='true' headerText='Price' textAlign='Right' width=90></e-column>
<e-column field='customer.something' headerText='Other' editType='dropdownedit' [edit]='editParams' width=120>
</e-column>
</e-columns>
</ejs-grid> -->
1 ответ
Вы можете использовать конвейер для получения значения поля по строковому пути. Как это:
@Pipe({name: 'fieldFromPath'})
export class FieldFromPathPipe implements PipeTransform {
transform(data: Object, property: string): Object {
property = property.replace(/\[(\w+)\]/g, '.$1');
property = property.replace(/^\./, '');
var a = property.split('.');
for (var i = 0, n = a.length; i < n; ++i) {
var k = a[i];
if (k in data) {
data = data[k];
} else {
return;
}
}
return data;
}
}
и в шаблоне:
<ng-template #template let-data>
{{data | fieldFromPath: column.field | currency:'EUR'}}
</ng-template>
Вот как это будет выглядеть:
https://stackblitz.com/edit/angular-ej2syncfusion-angular-grid-jqm2kz
PS: у меня есть функция для получения значения свойства из строкового пути из этого ответа stackru: доступ к вложенным объектам и массивам JavaScript по строковому пути
Есть и другие способы получить это, может быть, лучше.