In this vue2-datatables demo example, I'm using
below libraries to achieve Vue2 data tables,
1. Vue-tables-2
library
2. Axios
promise based library
We can do the following things with Vue2 Datatables,
1. Filter
2. Sorting
3. Pagination
4. Grouping
All the data is passed in the following GET
parameters,
a. query
b. limit
c. page
d. orderBy
e. ascending
f.
byColumn
You just need to return a JSON object with two
properties,
a. data: array object
b. count:
number
Table of Contains:-
1. Vue2
Datatables Dependencies
2. Vue2
Datatables Compatibility
3. Install
Vue using Vue CLI
4. Configure
backend server - JSON Server
5. Install
Axios and vue-axios
6. Create
a component in your components folder
7. Install
Bootstrap 4+
8. Install Vue-tables-2
9. Send
an Axios GET request for getting APIs data
10. Results
11. Download
source code from below given link
Vue2 Datatables Dependencies:-
=> Vue.js
(>=2.0)
=> Server
Side: Axios OR Vue-resource (>=0.9.0) OR jQuery for the AJAX requests
Vue2 Datatables Compatibility:-
=> Vuex (>=2.0)
=> Bootstrap 3 / Bootstrap 4 / Bulma
Installation Steps in detail with code sample:-
Install
Vue.js using Vue CLI:-
Install Vue CLI using below NPM command,
npm install -g @vue/cli
Create
a Vue2 project using below NPM command,
vue create vuedatatable
Here, vuedatatable is the name of your project -
you can change as per you. Now go to the above-created project directory folder
using the below NPM command,
cd vuedatatable
Open your project on your editor, in this demo project
- I'm using Visual Studio Code (VS Code).
Now, go to new Terminal window in
your opened project directory and run the server using the below NPM command,
npm run serve
Configure Backend Server (JSON Server):-
Install json-server using NPM command,
npm install -g json-server
Now, create a folder (data) in the root directory
and add a Json file (your JSON data) called “db.json”
Let's
see the “db.json” file data -
{
"users": [{
"id": "1",
"name": "Anil",
"qualification":"BSc., MCA, MCTS,
MCP."
},
{
"id": "2",
"name": "Sunil",
"qualification":"BSc."
},
{
"id": "3",
"name": "Sushil",
"qualification":"BSc."
},
{
"id": "4",
"name": "Aradhya",
"qualification":"UKG"
},
{
"id": "5",
"name": "Reena",
"qualification":"BA, MA,
BTC"
},
{
"id": "6",
"name": "code
sample",
"qualification":"BSc., MCA, MCTS,
MCP."
},
{
"id": "7",
"name": "Dilip",
"qualification":"BSc., MCA"
},
{
"id": "8",
"name": "Param",
"qualification":"BSc., MCA"
},
{
"id": "9",
"name": "Up",
"qualification":"BSc., MBA"
},
{
"id": "10",
"name": "Alok",
"qualification":"BSc., MCA"
},
{
"id": "11",
"name": "Test 2",
"qualification":"BSc., MCA"
}]
}
Now, start the JSON server using the below NPM
command,
json-server --watch data/db.json --port 4000
Install Axios and vue-axios :-
Install below NPM command,
npm install
vue-axios axios --save
Now, import these axios packages inside main.js
file (src -> main.js)
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
Create a component in your components folder:-
The name of your component is - VueDataTable.vue
(name as per you).
//
VueDataTable.vue
<template>
<div>
DataTable
</div>
</template>
<script>
export default {
}
</script>
Now, import this component inside App.vue file.
<template>
<div
id="app">
<vue-data-table></vue-data-table>
</div>
</template>
<script>
import VueDataTable from
'./components/VueDataTable'
export default {
name: 'app',
components: {
VueDataTable
}
}
</script>
<style>
#app {
font - family: 'Avenir',
Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 10px;
}
</style>
Install Bootstrap 4 library:-
Use the below NPM command,
npm install bootstrap --save
Now, Import the bootstrap file in the main.js
file.
// main.js
import '../node_modules/bootstrap/dist/css/bootstrap.min.css'
Install vue-tables-2 library:-
Install the below NPM command,
npm install vue-tables-2 --save
Now, register vue-tables-2 in the main.js file
and its looks like,
import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
import '../node_modules/bootstrap/dist/css/bootstrap.min.css'
import { ClientTable } from 'vue-tables-2';
Vue.use(ClientTable);
Vue.use(VueAxios, axios)
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
Send an Axios GET request:-
Now send a GET request to the “json-server” to
fetch the JSON data.
this.axios.get('http://localhost:4000/users').then(result
=> {
this.tableData
= result.data
})
Note: You can use your APIs and others to fetch
the JSON data.
Let's
see the VueDataTable.vue file,
//
VueDataTable.vue
<template>
<div
class="container">
<v-client-table
:data="tableData"
:columns="columns"
:options="options">
</v-client-table>
</div>
</template>
<script>
export
default {
data() {
return {
columns: ['id',
'name', 'qualification'],
tableData: [],
options: {
headings: {
id: 'UserID',
name: 'User
Name',
qualification:'User
Qualification'
},
sortable: ['name',
'qualification'],
filterable: ['name',
'qualification']
}
}
},
mounted()
{
this.axios.get('http://localhost:4000/users').then(result
=> {
this.tableData
= result.data
})
}
}
</script>
<style>
#app
{
width: 95%;
margin-top: 50px;
}
.VuePagination
{
text-align: center;
}
.vue-title
{
text-align: center;
margin-bottom: 10px;
}
.vue-pagination-ad
{
text-align: center;
}
.glyphicon.glyphicon-eye-open
{
width: 16px;
display: block;
margin: 0 auto;
}
th:nth-child(3)
{
text-align: center;
}
.VueTables__child-row-toggler
{
width: 16px;
height: 16px;
line-height: 16px;
display: block;
margin: auto;
text-align: center;
}
.VueTables__child-row-toggler--closed::before
{
content: "+";
}
.VueTables__child-row-toggler--open::before
{
content: "-";
}
</style>
Results:-
Let's see the resulting pic.
Download: SourceCode from here...