npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

budhi_vuejs-datatable

v0.9.2

Published

A Vue.js component for filterable, sortable, and paginated tables.

Readme

FORKED FROM: https://github.com/pstephan1187/vue-datatable

PACKAGE FOR PERSONAL USE WILL NOT BE MAINTAINED

PLEASE USE THE VERSION: https://github.com/pstephan1187/vue-datatable

Vue.js Datatable Component

Allows for quick and easy setup of filterable, sortable, and paginated tables. Currently supports both Vue.js 1 and Vue.js 2.

Installation

npm install vuejs-datatable

OR

yarn add vuejs-datatable

OR

You can use the pre-compiled ES5 version of the component found in dist/vuejs-datatable.js. This will automatically register the component to datatable.

<datatable :columns="columns" :rows="rows" paginate filterable></datatable>


<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.28/vue.js"></script>
<script src="/dist/vuejs-datatable.js"></script>
<script>
vm = new Vue({
	el: 'body',
	data: {
		columns: [...],
		rows: [...]
	}
}
</script>

Usage

Register the component in your JS file:

Vue.component('datatable', require('vuejs-datatable'));

Use the component in your HTML or template:

<datatable :columns="table_columns" :data="table_rows" filterable paginate></datatable>

Then pass in the columns and the data to your Vue instance:

Vue.component('edit-button', {
	template: `
		<button class="btn btn-xs btn-primary" @click="goToUpdatePage">Edit</button>
	`,
	props: ['row', 'data'],
	methods: {
		goToUpdatePage: function(){
			// window.location = '/contact/' + this.row.id + '/update'; // or
			window.location = '/' + data.path + '/' + this.row.id + '/' + data.action;
		}
	}
});

new Vue({
	el: '#vue-element',
	data: {
		table_columns: [
			{label: 'First Name', field: 'first_name'},
			{label: 'Last Name', field: 'last_name'},
			{label: 'Email', field: 'email'},
			{label: 'age', callback: function(row){
				var ageDiff = Date.now() - (new Date(row.birthdate).getTime());
				var ageDate = new Date(ageDiff);
				return Math.abs(ageDate.getUTCFullYear() - 1970);
			}},
			{
				label: '',
				component: 'edit-button',
				component_data: {
					path: 'contact',
					action: 'update'
				}
			}
		],
		table_rows: []
	}
});

Properties

columns

Here you define the label for the table headers and their cooresponding row field, callback or component.

field

{
	label: 'First Name',
	field: 'first_name
}

This will add the label "First Name" to the table header, and return the first_name property for each row.

You can also use deep object paths as well. If your JSON has nested objects, you can reference the nested fields:

rows: [
	{
		"id": 1,
		"user": {
			"username": "dprice0",
			"first_name": "Daniel",
			"last_name": "Price",
			"email": "[email protected]"
		},
		"address": "3 Toban Park",
		"city": "Pocatello",
		"state": "Idaho"
	},
	//...
],
columns: [
	{label: "Username", field: "user.username"}
]

callback

{
	label: 'age',
	callback: function(row){
		var ageDiff = Date.now() - (new Date(row.birthdate).getTime());
		var ageDate = new Date(ageDiff);
		return Math.abs(ageDate.getUTCFullYear() - 1970);
	}
}

This will run the callback against each row and pass the result to the cell for the cooresponding label.

component

Vue.component('edit-button', {
	template: `
		<button class="btn btn-xs btn-primary" @click="goToUpdatePage">Edit</button>
	`,
	props: [row],
	methods: {
		goToUpdatePage: function(){
			// window.location = '/contact/' + this.row.id + '/update'; // or if you pass some data through _component_data_:
			window.location = '/' + data.path + '/' + this.row.id + '/' + data.action;
		}
	}
});
{
	label: '',
	component: 'edit-button',
	component_data: {
		path: 'contact',
		action: 'update'
	}
}

This will inject the given component and the given component data into the cell for the cooresponding row. The datatable will then pass each row to that component via a row and data props. It compiles something like this:

<tr v-for="row in rows">
	<td v-for="column in columns">
		<component :is="column.component" :row="row" :data="column.component_data"></component>
	</td>
</tr>

align

This will align the text in both the header cells and the body cells as defined. Uses inline styles. Default: left.

sortable

This is a boolean value that determines whether or not that column can be sorted. Sorting is enabled by default on all columns except for component columns. Component columns do not currently support sorting. To disable sorting on any particular column, define sortable as false:

{
	label: 'Email',
	field: 'email',
	sortable: false
}

filterable

This is a boolean value that determines whether or not that column should be utilized in filtering. Filtering is enabled by default on all columns except for component columns. Component columns do not currently support filtering. To disable filtering on any particular column, define filterable as false:

{
	label: 'Email',
	field: 'email',
	filterable: false
}

Filtering works such that the text in the filter input is split by white space, and each word is then checked against every filterable column. If each word appears at least once in any column, then that row passes and is displayed in the table.

data

This is the data that is represented by each row in the table. It must be an array of objects where the key of each object is the value for your column.field entries. For example, if you have a column entry like this:

{
	label: 'First Name',
	field: 'first_name
}

Then you must have a key of first_name in your row objects. The entire row object will get passed to any columns that utilize callbacks or components. Your rows should look something like this:

[
	{
		id: 1,
		first_name: 'John',
		last_name: 'Doe',
		birthdate: '1980-01-24'
	}
]

filterable

This is a boolean flag that denotes whether you want to expose a field that allows the user to type to filter through rows.

paginate

This is a boolean flag that denotes whether you want to paginate the rows in your table.

size-options

Allows you to determine what page sizes to allow the user to choose when viewing the table.

data-store

Allows you to overwrite the logic for your own custom datastore. An example would be for an ajax table. See the Ajax example for reference.

filter-bar (NO LONGER SUPPORTED AS OF 0.7.0)

If you want to customize the display or functionality of the filter/pagination bar, you can register a custom global component and pass it's name here. Then the datatable will utilize your custom component instead of the default one. It will require the following props:

  • rows: a list of objects representing the entries to be displayed in the table
  • filterable: a boolean value determining whether or not to utilize filtering
  • paginate: a boolean value determining wheter or not to utilize pagination

It will also need to supply a change event that will pass back the filtered and paginate rows. This should occur whenever pagination or filtering has taken place.