vue-smart-table
Version:
A table with dynamic components for vue.js
196 lines (134 loc) • 4.72 kB
Markdown
# vue-smart-table
[](https://gitter.im/gurghet/vue-smart-table?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://www.npmjs.com/package/vue-smart-table)
> A vue table with dynamic components
## Usage
Basically you write this
```html
<smart-table
:auto-load="true"
body-path="results"
id-col="id.value"
endpoint="http://api.randomuser.me/?page=1&results=20"
:header="[
{key: 'name.first', label: 'name'},
{key: 'name.last', label: 'surname'},
{key: 'gender'},
{key: 'phone+cell', label: 'contacts'},
{key: 'picture.thumbnail', label: 'avatar'}
{key: 'nat', label: 'nationality'}
]"
:order-by="['name.first', 'name.last']"
>
<src2img slot="picture.thumbnail"></src2img><!-- renders pictures -->
<contacts slot="phone+cell"></contacts><!-- custom formatting -->
<nationality slot="nat"></nationality><!-- queries a remote server for country code to country name conversion -->
<fontawesome slot="gender"></fontawesome><!-- font awesome! -->
</smart-table>
```
and you get this

[Demo](http://codepen.io/gurghet/pen/qNZprz)
## Installation
#### Webpack/Browserify
``` bash
npm install vue-smart-table --save
```
In your app then you write:
``` javascript
import SmartTable from "vue-smart-table"
Vue.component('smart-table', SmartTable)
```
#### <script> tag inside your page
``` html
<!-- optional in your head -->
<link rel="stylesheet" href="https://npmcdn.com/vue-smart-table@2.4.0/dist/static/vue-smart-table-default.css">
<!-- at the end of your body -->
<script src="https://npmcdn.com/vue-smart-table@2.4.0/dist/static/vue-smart-table.js"></script>
```
That’s it! The component will register itself!
---
After that you can freely use it in your templates:
``` html
<smart-table :body="[{hello:'world'}]"></smart-table>
```
## Documentation
For the moment being I'll collect some documentation at the following link:
http://forum.vuejs.org/topic/4140/vue-smart-table
I'm also writing the wiki
[Documentation](https://github.com/gurghet/vue-smart-table/wiki)
The format of the `body` prop is like the following:
```
[ { _id: 3 , name: 'John' , surname: 'Smith' },
{ _id: 92, name: 'Fulano', surname: 'Perro' } ]
```
## Contribute
``` bash
# install dependencies
npm install
# serve demo app with hot reload at localhost:8080
npm run dev
# build standalone with minification
npm run build
# run unit tests
# always run unit tests! D:<
npm run ~unit
```
## Roadmap
* [x] Bootsrap/Semantic compatibility
* [x] Derived columns
* [ ] Sorting
* [x] Client side
* [ ] Server side
* [ ] Pagination
* [ ] Client side
* [ ] Server side
* [x] Inline editing
* [ ] Inline adding
* [ ] Inline validation
* [ ] Drag row to reorder
* [ ] Filtering
* [ ] Client side
* [ ] Server side
## Similar Components
Here is a list of similar components that also display a table:
- [vue-table](https://github.com/ratiw/vue-table)
##Changelog
###2.4.2
- [Fix] As a workaround for Safari, use explicitly CSS polyfill
###2.4.1
- [Fix] Added polyfill for CSS.escape
- [Fix] Removed instances of HTMLNodelist.forEach
###2.4.0
- [Feature] Inline edit capabilities with more advanced components
- Breaking change: format of the `header` prop is changed (`:header="[{key: 'key1', label: 'label'}, {key: 'keyEqualsToLabel'}]"`
- Breaking change: `body-field` => `body-path`
- Bootstrap/Semantic compatibility
###2.3.1
- [Fix] Shows `_id` column if explicitly set in the header
###2.3.0
- click column headers to order by that column
###2.2.1
- again forgot about the dist files -.-
###2.2.0
- can set body-field to empty string if data is already in an array
###2.1.1
- forgot to rebuild the dist files -.-
###2.1.0
- derived columns (`:header="{'home+office+mobile':'contacts'}"`)
###2.0.0
- completely new body format (see docs)
- auto loading data on startup using the "auto-load" prop
- header can read from nested attributes with dot notation (eg. "name.last")
- ids can now include letters, some signs (._-) and can be null
- body and id fields can be changed through "body-field" and "id-col" props
###1.0.5
- stains the global scope with SmartTable constructor
###1.0.4
Working on break dependencies on other modules
- build now yields only two files
- external dependencies now needs to be available in global namespace
- Ramda
- jQuery
- Vue
- VueResource