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

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

时间2025-05-04 23:40:45分类IT科技浏览3753
导读:刚解决了这个问题,趁热赶快拿出来凉凉,明天早上起来估计会忘...

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

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

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

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

首先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
怎么玩游戏赚钱?(如何玩游戏赚钱方法-捕鱼/棋牌类游戏赚钱秘籍:犀利的眼睛+胆大心细敢下手=成功) Win10禁用输入法快捷键(win10禁用设备安装更新教程)