Vue List - Customize Group Headers
You can define a groupTemplate to customize group headers. Without a groupTemplate, group headers display the text of the key field in bold font.
jQuery
JavaScript
const fruitsVegetables = [{
key: "Fruits",
items: [
{ name: "Apples", count: 10 },
{ name: "Oranges", count: 12 },
{ name: "Lemons", count: 15 }
]
}, {
key: "Vegetables",
items: [
{ name: "Potatoes", count: 5 },
{ name: "Tomatoes", count: 9 },
{ name: "Turnips", count: 8 }
]
}];
$(function() {
$("#listContainer").dxList({
dataSource: new DevExpress.data.DataSource({
store: fruitsVegetables,
map: function(groupedItem) {
let overallCount = 0;
groupedItem.items.forEach(function(item) {
overallCount += item.count;
});
return $.extend(groupedItem, { overallCount: overallCount })
}
}),
grouped: true,
groupTemplate: function(groupData, _, groupElement) {
groupElement.append(
$("<p>").text(groupData.key + " | " + groupData.overallCount)
)
},
itemTemplate: function(data, _, element) {
element.append(
$("<p>").text(data.name + " | " + data.count).css("margin", 0)
)
}
});
});Angular
HTML
TypeScript
<dx-list
[dataSource]="listDataSource"
[grouped]="true"
groupTemplate="group"
itemTemplate="item">
<div *dxTemplate="let itemObj of 'item'">
<p style="margin:0px">{{itemObj.name}} | {{itemObj.count}}</p>
</div>
<div *dxTemplate="let groupObj of 'group'">
<p>{{groupObj.key}} | {{groupObj.overallCount}}</p>
</div>
</dx-list>
import { DxListModule } from "devextreme-angular";
import DataSource from "devextreme/data/data_source";
// ...
export class AppComponent {
fruitsVegetables = [{
key: "Fruits",
items: [
{ name: "Apples", count: 10 },
{ name: "Oranges", count: 12 },
{ name: "Lemons", count: 15 }
]
}, {
key: "Vegetables",
items: [
{ name: "Potatoes", count: 5 },
{ name: "Tomatoes", count: 9 },
{ name: "Turnips", count: 8 }
]
}];
listDataSource = new DataSource({
store: fruitsVegetables,
map: function(groupedItem) {
let overallCount = 0;
groupedItem.items.forEach(function(item) {
overallCount += item.count;
})
return Object.assign(groupedItem, { overallCount: overallCount });
}
});
}
@NgModule({
imports: [
// ...
DxListModule
],
// ...
})Vue
App.vue
<template>
<DxList
:data-source="listDataSource"
:grouped="true"
item-template="list-item"
group-template="group-header">
<template #list-item="{ data }">
<p style="margin:0px">{{ data.name }} | {{ data.count }}</p>
</template>
<template #group-header="{ data }">
<p>{{ data.key }} | {{ data.overallCount }}</p>
</template>
</DxList>
</template>
<script>
import 'devextreme/dist/css/dx.light.css';
import DxList from 'devextreme-vue/list';
import DataSource from 'devextreme/data/data_source';
const fruitsVegetables = [{
key: "Fruits",
items: [
{ name: "Apples", count: 10 },
{ name: "Oranges", count: 12 },
{ name: "Lemons", count: 15 }
]
}, {
key: "Vegetables",
items: [
{ name: "Potatoes", count: 5 },
{ name: "Tomatoes", count: 9 },
{ name: "Turnips", count: 8 }
]
}];
const listDataSource = new DataSource({
store: fruitsVegetables,
map: function(groupedItem) {
let overallCount = 0;
groupedItem.items.forEach(function(item) {
overallCount += item.count;
});
return Object.assign(groupedItem, { overallCount: overallCount });
}
});
export default {
components: {
DxList
},
data() {
return {
listDataSource
}
}
}
</script>React
App.js
import React from 'react';
import 'devextreme/dist/css/dx.light.css';
import List from 'devextreme-react/list';
import DataSource from 'devextreme/data/data_source';
const fruitsVegetables = [{
key: "Fruits",
items: [
{ name: "Apples", count: 10 },
{ name: "Oranges", count: 12 },
{ name: "Lemons", count: 15 }
]
}, {
key: "Vegetables",
items: [
{ name: "Potatoes", count: 5 },
{ name: "Tomatoes", count: 9 },
{ name: "Turnips", count: 8 }
]
}];
const listDataSource = new DataSource({
store: fruitsVegetables,
map: function(groupedItem) {
let overallCount = 0;
groupedItem.items.forEach(function(item) {
overallCount += item.count;
});
return Object.assign(groupedItem, { overallCount: overallCount });
}
});
const ListItem = (data) => {
return (
<p style={{ margin: '0px' }}>{ data.name } | { data.count }</p>
);
};
const ListGroupHeader = (data) => {
return (
<p>{ data.key } | { data.overallCount }</p>
);
};
export default function App() {
return (
<List
dataSource={listDataSource}
grouped={true}
itemRender={ListItem}
groupRender={ListGroupHeader}
/>
);
}See Also
Feel free to share topic-related thoughts here.
If you have technical questions, please create a support ticket in the DevExpress Support Center.
Thank you for the feedback!
If you have technical questions, please create a support ticket in the DevExpress Support Center.