vue实现两个el-select下拉框联动效果

文章介绍了如何在Vue项目中利用后端返回的数据格式,通过el-select组件实现下拉框的二级联动效果。当选择一级分类时,动态更新二级分类的选择项。代码示例展示了v-for循环遍历数据以及change事件的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1. 实现效果:

2.后端返回的数据格式

只有一个list,多数文章中都是两个list实现联动

"list": [
      {
        "id": "1178214681118568449",
        "title": "后端开发",
        "children": [
          {
            "id": "1178214681139539969",
            "title": "Java"
          },
          {
            "id": "1178585108407984130",
            "title": "Python"
          },
          {
            "id": "1454645056483913730",
            "title": "C++"
          },
          {
            "id": "1454645056731377666",
            "title": "C#"
          }
        ]
      },
      {
        "id": "1178214681181483010",
        "title": "前端开发",
        "children": [
          {
            "id": "1178214681210843137",
            "title": "JavaScript"
          },
          {
            "id": "1178585108454121473",
            "title": "HTML/CSS"
          }
        ]
      },
      {
        "id": "1178214681231814658",
        "title": "云计算",
        "children": [
          {
            "id": "1178214681252786178",
            "title": "Docker"
          },
          {
            "id": "1178214681294729217",
            "title": "Linux"
          }
        ]
      },
      {
        "id": "1178214681324089345",
        "title": "系统/运维",
        "children": [
          {
            "id": "1178214681353449473",
            "title": "Linux"
          },
          {
            "id": "1178214681382809602",
            "title": "Windows"
          }
        ]
      },
      {
        "id": "1178214681399586817",
        "title": "数据库",
        "children": [
          {
            "id": "1178214681428946945",
            "title": "MySQL"
          },
          {
            "id": "1178214681454112770",
            "title": "MongoDB"
          }
        ]
      },
      {
        "id": "1178214681483472898",
        "title": "大数据",
        "children": [
          {
            "id": "1178214681504444418",
            "title": "Hadoop"
          },
          {
            "id": "1178214681529610242",
            "title": "Spark"
          }
        ]
      },
      {
        "id": "1178214681554776066",
        "title": "人工智能",
        "children": [
          {
            "id": "1178214681584136193",
            "title": "Python"
          }
        ]
      },
      {
        "id": "1178214681613496321",
        "title": "编程语言",
        "children": [
          {
            "id": "1178214681626079234",
            "title": "Java"
          }
        ]
      }
    ]

 3、vue页面中代码

 <!-- 所属分类 TODO -->
      <el-form-item label="课程分类">
        <!--一级分类-->
        <el-select
          v-model="courseInfo.subjectParentId"
          placeholder="一级分类" @change="subjectLevelOneChanged">
          <el-option
            v-for="subject in subjectOneList"
            :key="subject.id"
            :label="subject.title"
            :value="subject.id"/>
        </el-select>

        <!-- 二级分类 -->
        <el-select v-model="courseInfo.subjectId" placeholder="请选择">
          <el-option
            v-for="subject in subjectTwoList"
            :key="subject.value"
            :label="subject.title"
            :value="subject.id"/>
        </el-select>
      </el-form-item>
import course from '@/api/edu/course'
import subject from '@/api/edu/subject'
export default {
  data() {
    return {
      saveBtnDisabled: false, // 保存按钮是否禁用
      courseInfo:{
        title: '',
        subjectId: '',      //二级分类id
        subjectParentId:'', //一级分类id
        teacherId: '',      //讲师id
        lessonNum: 0,       //课时
        description: '',    //课程简介
        cover: '/static/01.jpg',          //默认封面图片
        price: 0
      },
      teacherList:[],  //封装所有的讲师数据
      subjectOneList:[],  //一级分类
      subjectTwoList:[] ,  //二级分类
      BASE_API: process.env.BASE_API // 接口API地址
    }
  },
  created() { //页面渲染之前执行
    //初始化所有讲师
    this.getListTeacher()
    //初始化一级分类
    this.getOneSubject()
  },
  methods: {
    //点击某个一级分类,会触发change事件,显示对应的二级分类
    subjectLevelOneChanged(value){
        //value就是一级分类的id值
        //先遍历所有的分类 里面包含一级和二级
      for (var i = 0; i <this.subjectOneList.length; i++) {
        //每个一级分类
        var oneSubject=this.subjectOneList[i]
        //判断:所有一级分类id和点击一级分类id是否一样
        //如果没有id,使用数组内其他属性对比也可以,比如name等
        if(value===oneSubject.id){  //===即比较值 还要比较类型
          //从一级分类中获取所有的二级分类
          this.subjectTwoList=oneSubject.children
          //把二级分类Id值清空
          this.courseInfo.subjectId=''
        }
      }
    },
    //查询所有的一级分类
    getOneSubject(){
      subject.getSubjectList()
      .then(response=>{
        this.subjectOneList=response.data.list
      })
    }
  }
}
</script>

 

 文章转载:vue实现下拉框二级联动效果-腾讯云开发者社区-腾讯云

作者主页链接:

别团等shy哥发育 - 个人中心 - 腾讯云开发者社区-腾讯云

### 使用 VueElement UI 实现 `el-select` 组件的二级联动 为了实现两个 `el-select` 组件之间的父子级联关系,可以按照以下方式构建: #### 数据准备 定义父选择器的数据结构以及对应的子选择器数据列表。 ```javascript // 父选择器数据 const fatherOptions = [ { value: 0, label: '父1' }, { value: 1, label: '父2' } ]; // 对应于不同父项的选择设置 const settingsOptions = [ [{ value: '选项1', label: '子1-1' }, { value: '选项2', label: '子1-2' }], [{ value: '选项1', label: '子2-1' }, { value: '选项2', label: '子2-2' }] ]; ``` #### HTML 结构 创建两个 `el-select` 元素用于表示父级和子级下拉框,并通过绑定属性来控制其行为。 ```html <template> <div> <!-- 父级 --> <el-select v-model="selectedFather" placeholder="请选择"> <el-option v-for="(item,index) in fatherOptions" :key="index" :label="item.label" :value="item.value"></el-option> </el-select> <!-- 子级 --> <el-select v-if="settingsOptions[selectedFather]" v-model="selectedChild" placeholder="请选择"> <el-option v-for="(childItem,idx) in settingsOptions[selectedFather]" :key="idx" :label="childItem.label" :value="childItem.value"></el-option> </el-select> </div> </template> ``` 上述模板中的 `v-if` 指令确保只有当选择了有效的父项时才会渲染子级菜单[^2]。 #### JavaScript 处理逻辑 初始化组件状态并监听父级变化事件更新子级可选项目。 ```javascript export default { data() { return { selectedFather: null, selectedChild: '' }; }, watch: { // 当父级发生变化时重置子级选择 selectedFather(newVal) { this.selectedChild = ''; } } }; ``` 此配置允许用户先从第一个下拉列表中做出选择之后再基于该选择动态加载第二个下拉列表的内容。每当更改父级选择时会触发相应的监视函数自动清空当前选定的子项以便重新填充新的选项集。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值