当前位置:   article > 正文

关于如何通过elementui的下拉框(el-select)实现同组共同选择、不同组互斥的简单实现_el 下拉框

el 下拉框

首先贴上效果图,如下:(下面新增了个用分组把每一组分开的,大概会好看点)

 这是简单的把同组选项归为一类的解决方案,难的我是真不大会做,因为不会控制input的内容,如果大佬有更好的解决方案可以评论区留言~

1、先贴一下代码和实例数据

  1. <el-select clearable
  2. v-model="form.testGroup"
  3. ref="mySelect"
  4. style="width: 90%"
  5. placeholder="请选择">
  6. <el-option v-for="group in testGroupSelect" :key="group.id" :label="group.names" :value="group.names">
  7. <div v-for="(item,index) in group.name" :key="index" style="margin-left: 10px">
  8. {{item}}
  9. </div>
  10. </el-option>
  11. </el-select>
  12. testGroupSelect: [{
  13. id:'id1',
  14. name:['k1','k2'],
  15. names:'k1、k2'
  16. },
  17. {
  18. id:'id2',
  19. name:['k3','k4'],
  20. names:'k3、k4'
  21. },
  22. {
  23. id:'id3',
  24. name: ['k5'],
  25. names:'k5'
  26. }
  27. ],

附上几点有用的知识:

1、:value在每个form组件中应该是唯一的吧,因为他应该是负责给form表单传值用的,多了就乱了

2、el-option这一行的 :value是绑定的提交给表单的值,因为这个下拉框肯定是给表单用的嘛,传的值就是这个value绑定的,比如如上代码我绑定的就是names,也就是我选中k1 k2的时候,提交到表单的是'k1、k2'这个值,如果你想提交id作为表单的值,改成:value='group.id'即可,这样就可以得到本表存id,跨表拿name,拿name方法如下:

这个testGroupSelect的数据结构还蛮奇怪的,在后端如果要从id1 , k1 、 id2 , k2这样的结构转过来还挺费劲,下面贴上我的转换方法

  1. List<Vo> list = 获取到的数据
  2. List<TestGroupSelect> testGroup = new ArrayList<>(); // 这个TestGroupSelect和上面示例数据结构一致,我就不贴了,
  3. for (Vo vo : list) {
  4. if (testGroup.size() == 0){
  5. // 为空则创建一个新对象
  6. testGroup.add(newTestGroupSelect(vo));
  7. continue;
  8. }
  9. boolean ifNew = true;
  10. // 有同id则添加
  11. for (TestGroupSelect testGroupSelect : testGroup) {
  12. if (vo.getTestGroup().equals(testGroupSelect.getId())){
  13. testGroupSelect.getName().add(vo.getName());
  14. ifNew=false;
  15. break;
  16. }
  17. }
  18. if (ifNew){
  19. // 无则新增
  20. testGroup.add(newTestGroupSelect(vo));
  21. }
  22. }
  23. // 完善names
  24. for (TestGroupSelect testGroupSelect : testGroup) {
  25. StringBuilder stringBuffer = new StringBuilder();
  26. for (String s : testGroupSelect.getName()) {
  27. stringBuffer.append(s);
  28. stringBuffer.append("、");
  29. }
  30. stringBuffer.delete(stringBuffer.length()-1,stringBuffer.length());
  31. testGroupSelect.setNames(String.valueOf(stringBuffer));
  32. }

这样的话就可以将testGroupSelect作为一个字典或者索引一样的东西来显示我们需要的内容,然后在前端表单显示会显示的id,我们只要在onLoad,也就是获取整体表单数据的时候通过这个testGroupSelect去进行下数据处理,代码示例如下:

  1. data.records.forEach((item) => {
  2. this.testGroupSelect.forEach((list) => {
  3. if (item.testGroup==list.id){
  4. item.testGroup=list.names
  5. }
  6. })
  7. })
  8. // 其中data.records存的就是我们后台传上来的的表单数据,用forEach对其进行处理

这属于是个耍小聪明的解决方案,不过还凑合,能用就行嘿嘿~~


新增一个能分组的,视觉效果好一点,效果如下~

如下是改完的前端代码,上面的示例是

  1. <el-option-group v-for="items in testGroupSelect" :key="testGroupSelect.id">
  2. <el-option :label="items.names" :key="items.id" :value="items.id">
  3. <div v-for="(item,index) in items.name" style="margin-left: 10px">
  4. {{item}}
  5. </div>
  6. </el-option>
  7. </el-option-group>

如果对你有帮助点个赞啊~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/114882
推荐阅读