当前位置: 首页 > wzjs >正文

潍坊网站建设壹品网络长春建站程序

潍坊网站建设壹品网络,长春建站程序,wordpress资源站主题,佛山市官网网站建设怎么样主要实现el-select下使用树结构,支持回显和筛选功能 el-selectel-tree 实现回显搜索 数据量大时推荐使用 el-selectvl-tree 封装的组件避免页面卡顿 vl-tree 简介 | Virtual Tree 封装的组件 el-selectel-tree 实现回显搜索 composeTree.vue <template><el-s…

主要实现el-select下使用树结构,支持回显和筛选功能

el-select+el-tree   实现回显+搜索

数据量大时推荐使用 el-select+vl-tree 封装的组件避免页面卡顿

vl-tree 简介 | Virtual Tree

封装的组件 el-select+el-tree   实现回显+搜索

composeTree.vue

<template><el-select :popper-class="popperClass"v-model="selectedList"placeholder="请选择"filterable:filter-method="handleFilter" multiple:collapse-tags="collapseTags"size="mini"@visible-change="handleSelectVisibleChange"@remove-tag="removeTag"><el-tree :filter-node-method="filterNode" show-checkbox ref="tree"@check-change="handleCheckChange":data="treeList" :node-key="nodeKey":props="props"><template slot-scope="{ node, data }"><slot :node="node" :data="data"><span class="custom-tree-node">{{data[props.label]}}</span></slot></template></el-tree><el-option value="" style="display: none;"></el-option></el-select>
</template>
<script>
export default {props: {props: {type: Object,default: () => {return {children: 'children',label: 'label',value: 'value',}}},nodeKey: {type: String,default: 'value'},collapseTags: {type: Boolean,default: false},popperClass: {type: String,default: ''},selectedIdList: {type: Array,default: () => []},treeList: {type: Array,default: () => []},feekback: {type: Boolean,default: false}},model: {prop: 'selectedIdList',//选中的数组event: 'updateSelectedIdList'},watch: {feekback: {handler(val) {if (val) {this.$nextTick(() => {this.$refs['tree'].setCheckedKeys(this.selectedIdList, true);})}},immediate: true},},data() {return {list: [],searchVal: '',noFilterTreeNode: false,//是否过滤树节点selectedList: [],// checkedNodeList:[],}},created() {},methods: {//筛选handleFilter(val) {if (this.noFilterTreeNode) return;this.searchVal = val;this.$refs['tree']?.filter(val);},filterNode(value, data, node) {if (!value) return truereturn data[this.props.label].toLowerCase().indexOf(value.toLowerCase()) !== -1},removeTag(val) {this.watchCheckChangeRun = false;let obj = this.checkedNodeList.find(item => item[this.props.label] === val);this.$refs.tree.setChecked(obj[this.props.value], false);setTimeout(() => {//由于首次回显不对tree有任何操作的时候,直接移除标签,不能触发tree的change事件,所以添加个手动调用if (!this.watchCheckChangeRun) {console.log('手动调用handleCheckChange======');this.handleCheckChange();}},1)},handleSelectVisibleChange(val) {this.noFilterTreeNode = false;if (!val) {//select框隐藏时,重置树结构if (this.searchVal) {this.handleFilter('')}}},//树选择变化handleCheckChange() {this.watchCheckChangeRun = true;let checkList=this.$refs['tree'].getCheckedNodes(true);this.selectedList = checkList.map(item => item[this.props.label]);this.$emit('updateSelectedIdList', checkList.map(item => item[this.props.value]));this.checkedNodeList = checkList;this.noFilterTreeNode = true;//避免vl-tree筛选问题},}
}
</script>

largeAmountTree.vue

使用el-select+vl-tree 实现大数据量时的 回显+搜索

vl-tree地址  简介 | Virtual Tree

<template><!-- 插件demo地址 https://sangtian152.github.io/virtual-tree/zh/demo/ --> <el-select :popper-class="'treeScrollSep '+popperClass"v-model="selectedList"placeholder="请选择"filterable:filter-method="handleFilter" multiple:collapse-tags="collapseTags"size="mini"@visible-change="handleSelectVisibleChange"@remove-tag="removeTag"><vl-tree :filter-method="filterNode"  show-checkbox ref="tree"@check-change="handleCheckChange":data="treeList" :node-key="nodeKey":props="props"></vl-tree><el-option value="" style="display:none;"></el-option></el-select>
</template>
<script>
export default {data() {return {list: [],searchVal: '',noFilterTreeNode: false,//是否过滤树节点selectedList: [],firstFeedback:true,} },props: {props: {type: Object,default: () => {return {children: 'children',label: 'label',value: 'value',}}},nodeKey: {type: String,default: 'value'},collapseTags: {type: Boolean,default: false},popperClass: {type: String,default: ''},selectedIdList: {type: Array,default: () => []},treeList: {type: Array,default: () => []},feekback: {type: Boolean,default: false}},model: {prop: 'selectedIdList',//选中的数组event: 'updateSelectedIdList'},watch: {feekback: {handler(val) {if (val) {this.$nextTick(() => {this.$refs['tree'].setCheckedKeys(this.selectedIdList, true);this.handleCheckChange();})  }},immediate: true},},methods: {handleFilter(val) {if (this.noFilterTreeNode) return;this.searchVal = val;this.$refs['tree'].filter(val)},filterNode(value, data, node) {if (!value) return truereturn data[this.props.label].toLowerCase().indexOf(value.toLowerCase()) !== -1},removeTag(val) {this.watchCheckChangeRun = false;let obj = this.checkedNodeList.find(item => item[this.props.label] === val);this.$refs.tree.setChecked(obj[this.props.value], false);setTimeout(() => {//直接移除标签,不能触发tree的change事件,所以添加个手动调用if (!this.watchCheckChangeRun) {this.handleCheckChange();}},1)},handleSelectVisibleChange(val) {this.$nextTick(() => {this.$refs['tree'].$el.children[0].children[0].scrollTop = 0;})this.noFilterTreeNode = false;if (!val) {//select框隐藏时,重置树结构if (this.searchVal) {this.handleFilter('')}}},//树选择变化handleCheckChange() {this.watchCheckChangeRun = true;let checkList=this.$refs['tree'].getCheckedNodes(true);this.selectedList = checkList.map(item => item[this.props.label]);this.$emit('updateSelectedIdList', checkList.map(item => item[this.props.value]));this.checkedNodeList = checkList;this.noFilterTreeNode = true;//避免vl-tree筛选问题},getSelectedInfo(data, list , arr) {data.forEach((item) => {let d = false;d = list.some(itemId => {return item[this.props.value] === itemId[this.props.value]})if (d) {arr.push(item);}if (item[this.props.children]) {this.getSelectedInfo(item[this.props.children], list);// 检查子节点是否有 disabled 为 true 的情况const childHasDisabled = item[this.props.children].some(child => child.disabled);if (childHasDisabled) {arr.push(item);}}});},}}
</script>
<style lang="less">
.treeScrollSep{min-width:260px !important;.vl-scrollbar.vl-virtual-list__wrapper{padding-left:8px;}.el-scrollbar__bar.is-vertical{display:none;}.vl-tree__content,.vl-tree-node__label{white-space: nowrap;text-overflow: ellipsis;overflow: hidden;}
}
</style>

页面中引用组件

页面内使用promise模拟接口返回列表数据和回显数据

<template><div><h2>下拉框中树结构及搜索功能</h2><div v-for="(v,i) in list" :key="i" class="box"><composeTree  :props="props" :nodeKey="'id'"v-model="v.selectedIdList" :treeList="treeList" :collapseTags="false" :feekback="feekback"><!--  <template #default="{node,data}"><div>{{data.name}}-{{ data.id }}</div></template> --></composeTree><div>selectedIdList:{{ v.selectedIdList }}</div></div><largeAmountTree :treeList="treeList2" :collapseTags="true" nodeKey="nodeId" :props="largeProps" v-model="largeSelectedIdList" :feekback="feekback2"></largeAmountTree><div>largeSelectedIdList:{{ largeSelectedIdList }}</div></div>
</template>
<script>
import composeTree from './composeTree.vue';
import { resTest } from './test';
import largeAmountTree from './largeAmountTree.vue';
export default {data() {return {props:{children: 'children',label: 'name',value: 'id',},list: [],treeList: [],treeList2: [],largeProps: {children: 'children',label: 'itemCategoryName',value: 'nodeId',disabled:'disabled'},largeSelectedIdList: [],feekback: false,feekback2: false}},components: {composeTree,largeAmountTree},created() {// 异步获取列表数据const promise1 = new Promise(function(resolve, reject) {if (true) {setTimeout(() => {const initials = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']const options = Array.from({ length: 50 }).map((_, idx) => ({id: `Option${idx + 1}`,name: `${initials[idx % 10]}${idx}`,children: [{id: `Option${'0' + idx + 1}`,name: `${initials[idx % 10]}${'0'+idx}`,},{id: `Option${'1' + idx + 1}`,name: `${initials[idx % 10]}${'1'+idx}`,}]}));// this.treeList = options;resolve(options);},1000)} else {reject(error);}});// 异步获取列表数据const promise2 = new Promise(function(resolve, reject) {if (true) {setTimeout(() => {// this.treeList = options;resolve(resTest.data);},1000)} else {reject(error);}});// 异步获取回显数据const promise3 = new Promise(function(resolve, reject) {if (true) {setTimeout(() => {// this.treeList = options;resolve([{id: 1,selectedIdList:['Option001']},{id: 2,selectedIdList:['Option111']}]);},2000)} else {reject(error);}});// 异步获取回显数据const promise4 = new Promise(function(resolve, reject) {if (true) {setTimeout(() => {resolve(['4100000001107797_4100000001107901']);},2500)} else {reject(error);}});this.getData1 = promise1.then(res => {this.treeList = res;})this.getData2 = promise2.then(res => {this.treeList2 = res;})this.getData3 = promise3.then(res => {this.list = res;})this.getData4 = promise4.then(res => {this.largeSelectedIdList = res;})//列表数据和回显数据都返回时Promise.all([this.getData1, this.getData3]).then(() => {console.log('all done');this.feekback = true;})//列表数据和回显数据都返回时Promise.all([this.getData2, this.getData4]).then(() => {console.log('all done---2');this.feekback2 = true;})},mounted() {},
}
</script>
<style lang="less" scoped>
.box {margin-bottom: 20px;
}
</style>


文章转载自:

http://bPsBey3I.tbpLf.cn
http://1mrdUWjc.tbpLf.cn
http://EBIoRNJP.tbpLf.cn
http://ni3CVYzF.tbpLf.cn
http://yAoUWtmo.tbpLf.cn
http://b0Xo4IHp.tbpLf.cn
http://UrdhElO3.tbpLf.cn
http://WFpggQWq.tbpLf.cn
http://kcupyWC0.tbpLf.cn
http://Vkn5WVCD.tbpLf.cn
http://lKT49CjA.tbpLf.cn
http://qr7K8rDO.tbpLf.cn
http://UZDX4YbT.tbpLf.cn
http://p8Yu68U4.tbpLf.cn
http://bLrJnuuS.tbpLf.cn
http://MqVtinvW.tbpLf.cn
http://VwGQSVA4.tbpLf.cn
http://REGBMhhx.tbpLf.cn
http://Cr9BZgH0.tbpLf.cn
http://CojzCkOy.tbpLf.cn
http://sXPH9EMu.tbpLf.cn
http://y9bzUiEb.tbpLf.cn
http://AKuuNZG8.tbpLf.cn
http://m3IRDkAJ.tbpLf.cn
http://pLv2U4tZ.tbpLf.cn
http://ZkexBSGZ.tbpLf.cn
http://vGIEq30s.tbpLf.cn
http://kpXrkQuW.tbpLf.cn
http://w9tiIITg.tbpLf.cn
http://FZyF59we.tbpLf.cn
http://www.dtcms.com/wzjs/686972.html

相关文章:

  • 手机网站代理wordpress标签导航
  • 将网站源码下载下来如何使用如何进入网站
  • 全网vip视频网站怎么做判断网站的好坏
  • 安装安全狗网站打不开开什么加工厂不愁销路
  • 网站建设教程哪个好如何在手机使用wordpress
  • 做网站内容来源电子版简历
  • 营销型网站设计服务商门户网站建设管理工作
  • 嘉兴网站建设运营鄂州门户网
  • 太子河网站建设粉丝帮女流做的网站
  • vs2015做网站如何添加控件珠海自适应网站设计
  • 做封面的地图网站茂名网站建设方案开发
  • 上海网站建设公司电话建设网站基本思路
  • 舟山网站建设有哪些帝国cms 商城网站视频教程
  • asp.net 网站开发视频教程企业网站优化分为哪两个方向
  • 淘宝客怎么做直播网站高雅不俗气的公司名字
  • 一个网站做seo德泰诺网站建设
  • 编程 朋友 做网站衡阳手机网站建设
  • 建站模板工程造价网络营销方式有哪些推广工具
  • 服装设计找图网站海盐建设局网站
  • python做网站有什么优势网站建设 郑州
  • 深圳建设网站哪家强WordPress手动切换主题
  • 微信小程序联盟网站中小企业网站开发
  • 网站轮播图怎么保存项目投资网
  • php网站开发报告用别人的照片做网站
  • 商城网站素材青岛永诚网络管理有限公司
  • 宜春制作网站公司哪家好范县网站建设费用
  • 番禺区pc端网站建设济宁网页
  • 微信网站开发报价表wap浏览器网页版
  • 做网站还赚钱么企业网站建站系统哪个好用
  • 黑白高端网站建设网站做的图上传后字变得很模糊