在我前面随笔《按部就班VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用》里面曾经介绍过一些常规的界面组件的处理,主要介绍到单文本输入框、多文本框、下拉列表,以及按钮、图片展现、弹出对话框、表单处理,本篇随笔补充这一个主题,介绍树列表组件和下拉列表树组件在项目中的使用,以及一个SplitPanel的组件。css
众所周知,通常界面不少状况涉及到树列表的处理,如类型展现,若是是一层的,能够用下拉列表代替,若是是多个层级的,采用树控件展现会更加直观。html
在Element里面也有一个el-tree的控件,以下所示,这里主要对它的各类属性和方法进行介绍。前端
简单的代码以下所示vue
<el-tree :data="data" @node-click="handleNodeClick"></el-tree>
主要在script部分里面指定它的data数据,以及单击节点的事件处理,结合卡片控件的展现,咱们能够把树放在其中进行展现node
界面代码以下所示,经过 default-expand-all 能够设置所有展开,icon-class 指定节点图标(也能够默认不指定)git
<el-card class="box-card"> <div slot="header" class="clearfix"> <span>树列表</span> <el-button style="float: right; padding: 3px 0" type="text">操做按钮</el-button> </div> <div> <el-tree style="padding-top:10px" :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",来指定树列表的展示内容,能够加入图标等信息github
而在script里面,定义了一个treedata的属性npm
// 初始化树列表 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" 便可。app
界面代码以下所示
<el-tree style="padding-top:10px" :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" style="padding-top:10px" :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 style="height: 400px"> <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 style="height:180px"> <!-- 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+Element 前端应用开发(1)--- 开发环境的准备工做
按部就班VUE+Element 前端应用开发(2)--- Vuex中的API、Store和View的使用
按部就班VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理
按部就班VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
按部就班VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展现和字段转义处理