xxxxxxxxxx
1
<template>
2
<div>
3
<mdb-datatable-2
4
v-model="data"
5
striped
6
bordered
7
small
8
maxHeight="1000px"
9
scrollY
10
materialInputs
11
class="h-auto d-inline-block"
12
responsive
13
:display="30"
14
selectable
15
/>
16
</div>
17
</template>
18
19
1
1
xxxxxxxxxx
1
<script>
2
import { mdbDatatable2 } from "mdbvue";
3
export default {
4
name: "DatatablePage",
5
components: {
6
mdbDatatable2,
7
},
8
methods: {
9
async fetchData(refetch = false) {
10
const response = await fetch(
11
"https://jsonplaceholder.typicode.com/users"
12
);
13
const data = await response.json();
14
15
//populate columns from the external API
16
let keysArray = [];
17
for (let key in data[0]) {
18
if (keysArray.length < 4) {
19
keysArray.push({
20
label: key.charAt(0).toUpperCase() + key.slice(1),
21
field: key,
22
sort: true,
23
});
24
}
25
}
26
27
// populate rows from the external API
28
let rowsArray = [];
29
for (let { id, name, username, email } of data) {
30
rowsArray.push({
31
id,
32
name,
33
username,
34
email,
35
});
36
}
37
38
if (refetch) {
39
// clear data before overwrite
40
// clearing columns will automatically add default test column
41
this.data.columns = [];
42
this.data.rows = [];
43
}
44
45
this.data.columns.push(...keysArray);
46
47
// remove test column
48
this.data.columns.splice(1, 1);
49
50
this.data.rows.push(...rowsArray);
51
},
52
},
53
data() {
54
return {
55
data: {
56
columns: [
57
{
58
field: "test",
59
label: "test",
60
},
61
],
62
rows: [],
63
},
64
column: "",
65
};
66
},
67
async mounted() {
68
this.fetchData();
69
setTimeout(() => {
70
this.fetchData(true);
71
}, 5000);
72
},
73
};
74
</script>
Console errors: 0