首页IT科技el-menu动态加载(el-cascader 动态加载+默认值)

el-menu动态加载(el-cascader 动态加载+默认值)

时间2025-09-19 11:27:28分类IT科技浏览5028
导读:刚解决了这个问题,趁热赶快拿出来凉凉,明天早上起来估计会忘...

刚解决了这个问题                  ,趁热赶快拿出来凉凉                        ,明天早上起来估计会忘

下拉框的选择和默认值对于我来说一直都是个让人头疼的事        ,倒不是有多么难              ,而是很繁琐                  。

要保证有值                         ,还要有显示的文字                        。表单提交后            ,再回过头编辑还要显示出来选择的项        。

进入正题吧         ,我看别人写的文章也非常讨厌巴拉巴拉一堆没用的              。

首先el-cascader最常用的是显示省市区                          ,所有省市区三四千项一下子加载出来总会有个卡顿的过程                ,所以我一般用动态加载    ,这个element的文档和例子很清楚了                         。

这是我代码中的一部分                          ,尽可能的去掉了多余的代码 <el-cascader ref="areas" v-model="address.area_ids" :options="options" :props="props" separator="/" /> data() { return { options: [], address: { area: [], area_ids: [], value: , lat: , lng: }, props: { lazy: true, //动态加载开关 lazyLoad(node, resolve) { //动态加载函数 const { level,value,label} = node; get("../city/get", { parentid: value }).then((res) => { if (res.state == success) { var data = res.data; data.map(item => { item.leaf = item.child == "0" //leaf如果是true就结束了                    ,意味着没有下一级 return item; }) resolve(data); } else { resolve([]); } }) } } } },

正常选择没问题            。一般刚开始的options默认的是第一级的数组

最头疼的部分,在编辑表单时要显示出来前面已经选择过的项                      ,也就是回显默认值                        ,首先保证v-mode的值是长度是3的数组(结合情况    ,不一定非要是3)                  ,一定保证[省,市,区]顺序正确                        ,我昨天大意写错了市的id        ,检查了一天没发现问题         。

另外              ,既然要显示默认值                         ,肯定也要给el-cascader一个默认的options,要保证是这种结构 [ { value:1, label:河南, leaf:false,//不带leaf            ,选项后面没有向右的箭头         ,下面的自行补充 children:[{ value:11, label:郑州, children:[ { value:111, label:中原区 }, { value:112, label:二七区 } ] },{ value:12, label:洛阳 }] }, { value:2, label:河北, } ]

应该很清晰了                          ,就是保证所选路径的上下级和平级数据完整                ,为什么要完整    ,因为还有下面一个问题                          。

在options处理完后                          ,默认值应该就可以正常显示了                。

但是当再更换地区市                    ,选了一下“郑州                ”后发现,郑州的子级重复了(选“河南                          ”也一样)                      ,这也好理解                        ,说明是郑州的子级又加载了一遍并且填充到下级的选项组里了    ,新加载的和默认的重复了    。这毕竟不完美                  ,做程序员慢慢有了强迫症了                        ,扒了扒element的源码        ,问题很好解决              ,只是element官方没有简单明了的说出来                          。

在处理完options和v-model后                         ,要处理选中项的加载状态            ,否则还会重新加载一次                    。 //上面的代码自行补充 this.$nextTick(_=>{ var node=this.$refs.areas.getCheckedNodes(); //获取当前选中节点 if(node&&node[0]&&node[0].pathNodes){//选中节点的所有父节点 for(var i=0;i<node[0].pathNodes.length;i++){ node[0].pathNodes[i].loaded=true; //节点的加载状态设为true         ,就不会再加载了 } } })

至此大功告成

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
windows远程桌面连接用户数量(修改远程桌面可同时连接数量)