element vue 动态单选_VUE 动态构建混合数据Treeselect选择树,同时解决巨树问题
今天在项目中需要通过行政区域选择,然后选择该行政区域下面的景区,也就是要构建行政区划、景区两表数据表的树。全国的行政区域到县已经3500多了,再加上景区会有几万个点,这棵选择树不论是在后台还是在前台构建都比较大,会影响系统性能,需要前后端结合,动态构建,使用时用懒加载,提升系统性能。
一、后台构建两个表的数据选择查询功能
1、行政区域需要按省、市、县的adcode和级别查询,以便于动态构建。两个参数,adcode后台查询时会将后面的0去掉匹配,级别如果0或空,查询匹配下所有的,为数字只查本级。这里有两个参数,用@requestParam传递的,注意要用post,前端VUE使用get传递时会报错。
@PostMapping("/listjson" ) @ApiOperation("根据查询条件获取区划清单") public AjaxResult listJson(@RequestParam(name="adcode", required = true) String adcode, @RequestParam(name="level",required = true) String level) { System.out.println(adcode); List> regionJson = iMapRegionService.selectRegionJson(adcode,level); return AjaxResult.success(regionJson); }}
2、查询行政区域下的景区,根据adcode查询,一个参数,参数放在路径中传递的。
@GetMapping("/listByCode/{adcode}") @ApiOperation("根据查询条件获取景区清单") public AjaxResult listByCode(@PathVariable String adcode) { List> scenicList = iMapScenicService.selectScenicByCode(adcode); return AjaxResult.success(scenicList); }}
二、在VUE中引入Treeselect
由于后面要用懒加载,在引用Treeselect给件同时,还要引入LOAD_CHILDREN_OPTIONS,Treeselect要加到components中。
import { LOAD_CHILDREN_OPTIONS, Treeselect } from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' export default { components: { Treeselect }, data() { return { //地点列表 regionOptions: [],
三、使用Treeselect组件
noChildrenText="更新中..." , //由于缺省会将没有加载下级节点的children设置为null,系统缺省会显示No sub-options,点击节点是,显示更新中更好,更新完成显示子节点。
:load-options="loadOptions" //增加此选项,在后方扩展子节点是会调用此方法,第一是点击左边的三解形,第二下面将非叶子节点设置为不能选择,点击节点也会自动扩展。
:disable-branch-nodes="true"> //将树枝节点设置为不能选择,树枝节点是行政区域,也不我们需要的景区ID,所以不能选择,否则数据会乱。
https://blog.csdn.net/wujize/article/details/106106416
四、构建初始的省级目录
组件打开初始化时,构建一级选择树
created() { this.getList() this.getTreeselect() }, methods: { /** 生成查询行政区划下拉树结构第一级 */ getTreeselect() { let formData = new FormData() //构建需要查询的参数,先选择省节点 formData.append('adcode', '000000') formData.append('level', '1') listJson(formData).then(response => { //listJson对应是询后台行政区域的接口函数 let data = response.data data.forEach(element => { element['id'] = element.code // 后台传递过来的是code和name,需要换为treeselect所需要的id和label element['label'] = element.name element['level'] = '1' //设置为1级,后续判断需要 element['children'] = null //要设置为空,才能触发:load-options="loadOptions"动用 }) this.regionOptions = data }) },
五、构建动态生成的二、三、四级目录
//动态添加树的子节点 loadOptions({ action, parentNode, callback }) { if (action === LOAD_CHILDREN_OPTIONS) { let formData = new FormData() formData.append('adcode', parentNode.id) switch (parentNode.level) { //判断选择级别 case '1' : /** 生成查询行政区划下拉树结构第二级 */ formData.append('level', '2') listJson(formData).then(res => { //选择市,构建2级 if (res.code === 200) { //后台返回是用code表示返回状态代码,与后台匹配 let data = res.data data.forEach(element => { element['id'] = element.code element['label'] = element.name element['level'] = '2' element['children'] = null }) parentNode.children = data //增加子节点 } }) callback() break case '2' : /** 生成查询行政区划下拉树结构第三级 */ formData.append('level', '3') listJson(formData).then(res => { if (res.code === 200) { let data = res.data data.forEach(element => { element['id'] = element.code element['label'] = element.name element['level'] = '3' element['children'] = null }) parentNode.children = data } }) callback() break case '3' : /** 生成查询行政区下的景区清单 */ listByCode(parentNode.id).then(res => { //第四级是景区,使用的是景区表,根据adcode查询 if (res.code === 200) { let data = res.data console.log(data) data.forEach(element => { //为景区增加一个图标,以示区别 element['label'] = element['label'] + '' //使用emoji文件,标识这是景区,treeselect没有icon图标 element['level'] = '4' }) parentNode.children = data } }) callback() break } } }
最后效果
这通过几天研究,掌握了Treeselect动态构建,可以解决巨树构建问题。
element vue 动态单选_VUE 动态构建混合数据Treeselect选择树,同时解决巨树问题的更多相关文章
- vue+element UI 使用select元素动态的从后台获取到
VUE select元素动态的从后台获取到 <el-form-item label="选择店铺"> <el-select v-model="value& ...
- vue 实现tab切换动态加载不同的组件
vue 实现tab切换动态加载不同的组件 使用vue中的is特性来加载不同的组件.具体看如下代码:这个功能对于vue比较复杂的页面可以使用上,可以把一个页面的功能拆分出来,使代码更简单.使用方式具体看 ...
- linux动态库与静态库混合连接
1, 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库.使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有 ...
- vue+element-ui实现无限级动态菜单树
使用vue+element-ui实现无限级动态菜单 该案例实现主要使用递归的思想,递归对新人来容易迷惑的是自己调用自己,直到满足条件为止,接下来我们就一步一步实现一个动态多级菜单vue组件 搭建项目并 ...
- vue点击时动态改变样式 ------- 最简单的方法
vue点击时动态改变样式 template中 <li :class="{ active:index==isActive }" @click="changeValue ...
- 三、深入Vue组件——Vue插槽slot、动态组件
一.插槽slot() 1.1简单插槽slot [功能]用于从父组件中,通过子组件写成双标签,向子组件中放入自定的内容 parent.vue [1]首先把child写成双标签样式,把要插入的内容放双标签 ...
- vue第十单元(动态组件 keep-alive(钩子函数) 递归组件(name) 组件命名约定)
第十单元(动态组件 keep-alive(钩子函数) 递归组件(name) 组件命名约定) #课程目标 熟练掌握动态组件的实现 掌握keep-alive缓存组件,以及相应的钩子函数 熟练掌握递归组件, ...
- 循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
在前面随笔<循序渐进VUE+Element 前端应用开发(3)--- 动态菜单和路由的关联处理>中介绍了在Vue + Element整合框架中,实现了动态菜单和动态路由的处理,从而可以根据 ...
- element-ui table 页面加载时,动态渲染后台传过来的数据(springmvc)
jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> &l ...
- java 动态代理 和动态编程
概述 代理分两种技术,一种是jdk代理(机制就是反射,只对接口操作),一种就是字节码操作技术.前者不能算技术,后者算是新的技术.未来将有大的动作或者较为广泛的应用和变革,它可以实现代码自我的编码(人工 ...
随机推荐
- pyc文件花指令
pyc花指令 常见的python花指令形式有两种:单重叠指令和多重叠指令. 以下以python3.8为例,指令长度为2字节. 单重叠指令: 例如pyc经过反编译后得到的东西为 0 JUMP_ABSOL ...
- 《JavaScript 模式》读书笔记(6)— 代码复用模式1
我们有开始进入新篇章了.这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容.对于前端进阶来说,是很重要的基础知识.这一篇内容会对原型. 继承有很深入的讲解.我也 ...
- DDPM论文解读
DDPM(Denoising Diffusion Probabilistic Models) 论文研究背景 扩散概率模型(Denoising Diffusion Probabilistic Model ...
- docker-compose安装mysql
0. 安装docker-compose,参见:[Amadeus原创]docker compose的安装 1. 目录结构:按以下目录结构mkdir文件夹和相关文件 mysql 目录下的 data 为数据 ...
- 题解:P10704 救赎(Redemption)
数论题,先看数据范围,发现 $n$ 和 $m$ 都非常大,但是 $\sum_{i=1}^{i=n}a_i \le 10^9$. 解以上不等式得不同的 $a_i$ 大约有 $40000$ 个.记有 $c ...
- Flutter 长列表优化
Flutter 长列表优化 固定列表和长列表的区别 固定列表中的组件,每次都会被重新构建 ListView.builder会按需构建列表元素,也就是只有那些可见得元素才会调用itemBuilder 构 ...
- Android7以上https抓包
1. 问题描述 1.1 运行环境 1.2 问题描述 virtualXposed 不一定支持Android模拟器 无法抓包 https 请求 1.3 问题原因 Android7 以后,系统分了系统证书和 ...
- 【转载】 一次生产环境的NOHTTPRESPONSEEXCEPTION异常的排查记录
https://www.freesion.com/article/41531004212/ 环境: jdk1.8+tomcat8+httpclient4.5.2 主要现象: 项目偶发出现org.apa ...
- Qt/C++离线读取全国任意经纬度高程海拔值/无任何依赖/纯原创代码解析
一.前言说明 做地图开发会遇到一个常规需求,就是获取当前经纬度对应的海拔高度,也叫做高程值,很遗憾各大地图厂商都未提供接口获取,可能是有明文规定,不能地图中提供对应的海拔高度值,于是需要另想他法,尽管 ...
- Qt开源作品18-无边框背景透明窗体
一.前言 用Qt来做无边框北京透明窗体非常简单,根本不需要用什么系统层的API来实现透明什么的,Qt本身提供了很多种设置窗体透明的方法,除了可以设置窗体的属性为透明以外,还可以设置透明度函数,以及qs ...