怎么在Vue中使用Element實現一個樹列表組件?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
眾所周知,一般界面很多情況涉及到樹列表的處理,如類型展示,如果是一層的,可以用下拉列表代替,如果是多個層級的,采用樹控件展示會更加直觀。
在Element里面也有一個el-tree的控件,如下所示,這里主要對它的各種屬性和方法進行介紹。

簡單的代碼如下所示
<el-tree :data="data" @node-click="handleNodeClick"></el-tree>
主要在script部分里面指定它的data數據,以及單擊節點的事件處理,結合卡片控件的展示,我們可以把樹放在其中進行展示

界面代碼如下所示,通過default-expand-all 可以設置全部展開,icon-class 指定節點圖標(也可以默認不指定)
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>樹列表</span>
<el-button type="text">操作按鈕</el-button>
</div>
<div>
<el-tree
:data="treedata"
node-key="id"
default-expand-all
icon-class="el-icon-price-tag"
highlight-current
@node-click="handleNodeClick"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>
<i :class="node.icon ? node.icon : 'el-icon-price-tag'" />
{{ node.label }}
</span>
</span>
</el-tree>
</div>
</el-card>其中界面里面,我們通過class="custom-tree-node",來指定樹列表的展現內容,可以加入圖標等信息
而在script里面,定義了一個treedata的屬性
// 初始化樹列表
treedata: [
{
label: '一級 1',
id: '1',
children: [{
id: '1-1',
label: '二級 1-1',
children: [{
label: '三級 1-1-1',
id: '1-1-1'
}, {
label: '三級 1-1-2',
id: '1-1-2'
}, {
label: '三級 1-1-3',
id: '1-1-3'
}]
}]
}
]如果設置有選擇框,得到界面如下所示。

主要設置show-checkbox 和@check-change="handleCheckChange" 即可。
界面代碼如下所示
<el-tree
:data="treedata"
node-key="id"
default-expand-all
highlight-current
show-checkbox
:default-checked-keys="['1-1-1']"
@node-click="handleNodeClick"
@check-change="handleCheckChange"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>
<i :class="node.icon ? node.icon : 'el-icon-price-tag'" />
{{ node.label }}
</span>
</span>
</el-tree>而對于樹列表,可以進行一個過濾處理操作,如下界面所示。

在內容區增加一個input的文本框進行過濾處理,并綁定對應的屬性變量
<el-input v-model="filterText" placeholder="輸入關鍵字進行過濾" clearable prefix-icon="el-icon-search" />
樹列表控件需要增加過濾函數綁定:filter-node-method="filterNode",如下代碼所示。
<el-tree
ref="tree"
class="filter-tree"
:data="treedata"
node-key="id"
default-expand-all
highlight-current
show-checkbox
:filter-node-method="filterNode"
@check-change="handleCheckChange"
@node-click="handleNodeClick"
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>
<i :class="node.icon ? node.icon : 'el-icon-price-tag'" />
{{ node.label }}
</span>
</span>
</el-tree>script的處理代碼如下所示,需要watch過濾的綁定值,變化就進行過濾處理。

為了在列表結合中進行快速的過濾,我們可以在上次介紹的列表界面里面增加一個樹列表的快速查詢處理。如下界面所示。

這里列表里面增加了一個第三方組件splitpanes,用來劃分區塊展示,而且可以拖動,非常不錯,地址是:
https://github.com/antoniandre/splitpanes
這個組件的Demo展示地址如下所示:https://antoniandre.github.io/splitpanes
效果大概如下所示

npm安裝如下所示
npm i --S splitpanes
安裝成功后,然后在vue文件的script部分里面引入即可
import { Splitpanes, Pane } from 'splitpanes'
import 'splitpanes/dist/splitpanes.css'它的使用代碼也很簡單
<splitpanes > <pane min-size="20">1</pane> <pane> <splitpanes horizontal> <pane>2</pane> <pane>3</pane> <pane>4<pane> </splitpanes> </pane> <pane>5</pane> </splitpanes>
我的列表界面使用了兩個Panel即可實現左側樹的展示,和右側常規列表查詢的處理。

除了常規的樹列表展示內容外,我們也需要一個在下拉列表中展示樹內容的界面組件。
這里又得引入一個第三方的界面組件,因此Element的Select組件不支持樹列表。
GitHub地址:https://github.com/riophae/vue-treeselect
官網地址:https://vue-treeselect.js.org/
NPM安裝:
npm install --save @riophae/vue-treeselect
界面代碼如下所示。
<template> <div id="app"> <treeselect v-model="value" :multiple="true" :options="options" /> </div> </template>
這里的value就是選中的集合,options則是樹列表的節點數據。
<script>
// import the component
import Treeselect from '@riophae/vue-treeselect'
// import the styles
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
// register the component
components: { Treeselect },
data() {
return {
// define the default value
value: null,
// define options
options: [ {
id: 'a',
label: 'a',
children: [ {
id: 'aa',
label: 'aa',
}, {
id: 'ab',
label: 'ab',
} ],
}, {
id: 'b',
label: 'b',
}, {
id: 'c',
label: 'c',
} ],
}
},
}
</script>我的測試界面代碼如下所示
<div > <!-- v-model 綁定選中的集合 options 樹節點數據 defaultExpandLevel 展開層次,Infinity為所有 flat 為子節點不影響父節點,不關聯 --> <treeselect v-model="value" :options="treedata" :multiple="true" :flat="true" :default-expand-level="Infinity" :open-on-click="true" :open-on-focus="true" clearable :max-height="200" /> </div>
<script>
// import vue-treeselect component
import Treeselect from '@riophae/vue-treeselect'
// import the styles
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
export default {
name: 'Tree',
components: { Treeselect },
data() {
return {
// 過濾條件
filterText: '',
// 初始化樹列表
treedata: [
{
label: '一級 1',
id: '1',
children: [{
id: '1-1',
label: '二級 1-1',
children: [{
label: '三級 1-1-1',
id: '1-1-1'
}, {
label: '三級 1-1-2',
id: '1-1-2'
}, {
label: '三級 1-1-3',
id: '1-1-3'
}]
}]
}
],
value: ['1-1-2']
}
},
................
}
</script>來一張幾個樹列表一起的對比展示界面。

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。
關于怎么在Vue中使用Element實現一個樹列表組件問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。