在實際項目中常常用到tree視圖,發現了幾個vue的tree插件,但都不是太適合本身項目,花了一些心思寫了一個插件,簡單靈活,適合大部分項目。css
Github 望不吝Star!html
一個簡單靈活的vue.js樹形組件,可做爲插件使用,也可直接做爲component
使用vue
使用時只需傳入一個樹形數據綁定。git
組件還提供了增刪改查
事件,你能夠很方便的在組件上監聽。github
不止這些,npm
增刪改查
事件A Demojson
# install npm install vue-simple-tree --sve-dev
treeData
數組
id
必要屬性,Number
bash
name
必要屬性,String
,可自定義,默認name
,如options.itemName:'display_name'
app
children
非必要,Array
treeData示例
{ "data": [{ "id": "1", "name": "Root", "children": [ { "id": "2", "name": "Node2" }, { "id": "3", "name": "Node3" }, { "id": "4", "name": "Node4", "children": [ { "id": "5", "name": "Node5" } ] } ] }] }
有兩種使用方法:
局部註冊component(推薦)
App.vue
<template> <div id="app"> <vue-tree v-model="checkedIds" :tree-data="treeData" :options="options"></vue-tree> </div> </template> <script> import VueTree from 'vue-simple-tree/src/components/VueTree.vue' import Tree from 'tree.json'; export default { name: 'app', components: { VueTree }, data () { return { // 複選ids,可傳入id數組做爲初始選中狀態,如[3,4,8] checkedIds: [], // tree數據 treeData: Tree.data, // 設置項 options: {} } } } </script>
全局註冊,經過插件形式註冊全局component
main.js
import App from './App' import Vuetree from 'vue-simple-tree' Vue.use(Vuetree); new Vue({ el: '#app', template: '<App/>', components: { App } })
App.vue
<template> <div id="app"> <vue-tree v-model="checkedIds" :tree-data="treeData" :options="options"></vue-tree> </div> </template> <script> import Tree from 'tree.json'; export default { name: 'app', data () { return { checkedIds: [], treeData: Tree.data, options: {} } } } </script>
如下是默認設置.
你能夠在options
裏覆蓋默認設置,或僅設置若干項options: {someOption: true}
你也能夠綁定一個空的對象:options="{}"
或直接忽略options
options: { // String,節點顯示字段 itemName: 'name', // Boolean,是否顯示添加子節點按鈕 addItem: true, // Boolean,是否顯示選擇框 checkbox: true, // Array,初始化時選中id (v2.1之後不推薦使用,v3.0將廢棄),替代方法見'#使用示例'章節 checkedIds: [], // Boolean,選中時是否展開節點 checkedOpen: true, // Boolean,目錄是否加粗顯示 folderBold: true, // String,展開按鈕(默認依賴font-awesome) openClass: 'fa fa-plus-square text-info', // String,收縮按鈕(默認依賴font-awesome) closeClass: 'fa fa-minus-square text-danger', // String,添加節點按鈕(默認依賴font-awesome) addClass: 'fa fa-plus text-danger', // Boolean,是否顯示編輯按鈕 showEdit: true, // Boolean,是否顯示刪除按鈕 showDelete: true, // String,編輯按鈕(默認依賴font-awesome) editClass: 'fa fa-edit', // String,刪除按鈕(默認依賴font-awesome) deleteClass: 'fa fa-trash-o' // (v2.1新增) Boolean,獲取複選項目是否包含目錄,默認`true`,若是隻獲取葉子節點設置爲`false` idsWithParent: true // (v2.1新增) Number,初始化時展開層級,根節點爲0,默認0 depthOpen: 0 }
注意:默認設置使用了
font-awesome
的圖標,
若是你繼續使用默認設置,請引入這個css
庫
自v2.1起,再也不從options.checkedIds獲取複選數據,
而是使用v-model="checkedIds"
獲取複選id.
默認狀況下獲取的ids是包含全部上級目錄的,若是你想獲取只包含葉子節點的ids,設置
options.idsWithParent
爲false
item-click
、add-a-child
、 item-edit
、item-delete
分別爲點擊節點、添加子節點、編輯節點、刪除節點事件。
這些事件綁定了操做id到監聽器
若是須要,你能夠選擇綁定這些事件的其中一個或多個。
<vue-tree v-model="ids" :tree-data="treeData" :options="options" @add-a-child="addAChild" @item-click="itemClick" @item-edit="itemEdit" @item-delete="itemDelete"> </vue-tree>
爲綁定的事件定義監聽方法,這些方法都接收一個當前操做id做爲參數
methods: { addAChild(id) { console.log('點擊了添加子節點按鈕,父節點ID[' + id + ']') }, itemClick(id) { console.log('點擊了節點,節點ID[' + id + ']') }, itemEdit(id) { console.log('點擊了編輯按鈕,節點ID[' + id + ']') }, itemDelete(id) { console.log('點擊了刪除按鈕,節點ID[' + id + ']') } }
若是你想修改默認樣式,一切都爲你準備好了,只須要從新定義如下css類
.vue-tree
.vue-tree .vue-tree-item
.vue-tree .item-wrapper
.vue-tree .item-wrapper .item-toggle
.vue-tree .item-wrapper .item-btn
.vue-tree .item-wrapper .item-btn .add-btn
.vue-tree .item-wrapper .item-btn .edit-btn
.vue-tree .item-wrapper .item-btn .delete-btn
.vue-tree-list