Creating tables from scratch is a pain.
This is why there are many table plugins to let us add tables easily.
In this article, we’ll look at how to add tables to a Vue app with the vue-good-table plugin.
Table Actions Slot
We can populate the slots with our own content.
For example, we can write:
<template>
<div>
<vue-good-table :columns="columns" :rows="rows">
<div slot="table-actions">top slot.</div>
</vue-good-table>
</div>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "Name",
field: "name"
},
{
label: "Age",
field: "age",
type: "number"
},
{
label: "Birthday",
field: "birthDay",
type: "date",
dateInputFormat: "yyyy-MM-dd",
dateOutputFormat: "MMM do yy"
}
],
rows: [
{ id: 1, name: "John", age: 20, birthDay: "2000-01-20" },
{ id: 2, name: "Jane", age: 24, birthDay: "2011-10-31" },
{ id: 3, name: "Susan", age: 16, birthDay: "2011-10-30" }
]
};
}
};
</script>
We set the slot
prop to table-actions
to populate the table-actions
slot.
The content will be shown above the table headings.
Empty state slot
We can also display something when the table is empty.
For instance, we can write:
<template>
<div>
<vue-good-table :columns="columns" :rows="rows">
<div slot="emptystate">Nothing to show</div>
</vue-good-table>
</div>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "Name",
field: "name"
},
{
label: "Age",
field: "age",
type: "number"
},
{
label: "Birthday",
field: "birthDay",
type: "date",
dateInputFormat: "yyyy-MM-dd",
dateOutputFormat: "MMM do yy"
}
],
rows: []
};
}
};
</script>
We populate the emptystate
slot to display something when rows
is empty.
The content will be shown in place of the row cells.
Mode
We can set the mode
to remote
so to allow sorting and filtering to be powered by server-side instead of client-side:
<template>
<div>
<vue-good-table :columns="columns" :rows="rows" mode="remote"/>
</div>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "Name",
field: "name"
},
{
label: "Age",
field: "age",
type: "number"
},
{
label: "Birthday",
field: "birthDay",
type: "date",
dateInputFormat: "yyyy-MM-dd",
dateOutputFormat: "MMM do yy"
}
],
rows: [
{ id: 1, name: "John", age: 20, birthDay: "2000-01-20" },
{ id: 2, name: "Jane", age: 24, birthDay: "2011-10-31" },
{ id: 3, name: "Susan", age: 16, birthDay: "2011-10-30" }
]
};
}
};
</script>
Compact Mode
We can add the compactMode
prop to display the table in compact mode.
For example, we can write:
<template>
<div>
<vue-good-table :columns="columns" :rows="rows" compactMode/>
</div>
</template>
<script>
export default {
data() {
return {
columns: [
{
label: "Name",
field: "name"
},
{
label: "Age",
field: "age",
type: "number"
},
{
label: "Birthday",
field: "birthDay",
type: "date",
dateInputFormat: "yyyy-MM-dd",
dateOutputFormat: "MMM do yy"
}
],
rows: [
{ id: 1, name: "John", age: 20, birthDay: "2000-01-20" },
{ id: 2, name: "Jane", age: 24, birthDay: "2011-10-31" },
{ id: 3, name: "Susan", age: 16, birthDay: "2011-10-30" }
]
};
}
};
</script>
Now the columns will be stacked when our screen is narrow.
Conclusion
We can populate various slots to display content on the top of the table or when there’s no content.