vue实现下拉框二级联动效果的实例代码

 更新时间:2021年11月02日 09:58:33   作者:别团等shy哥发育  
这篇文章主要介绍了vue实现下拉框二级联动效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1、实现效果

在这里插入图片描述

2、后端返回的数据格式

"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是否一样
        if(value===oneSubject.id){  //===即比较值 还要比较类型
          //从一级分类中获取所有的二级分类
          this.subjectTwoList=oneSubject.children
          //把二级分类Id值清空
          this.courseInfo.subjectId=''
        }
      }
    },
    //查询所有的一级分类
    getOneSubject(){
      subject.getSubjectList()
      .then(response=>{
        this.subjectOneList=response.data.list
      })
    }
  }
}
</script>

主要思想就是在第一级下拉框发生单击事件的时候,我们拿到第一级下拉框的id值(这里你不一定是id值),然后遍历包含所有数据的一级分类集合,找到和当前单击事件选中的一级分类id值相等的那个对象,然后把它的children属性(我的children在后端是个二级分类的集合)赋值给data属性里面的二级分类数组对象subjectTwoList即可。
我这里是后端一次性把所有数据都取到了,我在前端遍历解决的。当然,你也可以修改下单击事件的执行逻辑,还有一种方法是每单机一次,用单击选中的以及下拉框的键去后端查所有的二级分类,再将查到的二级分类赋值给第二个下拉框即可,但这样效率感觉有点慢,虽然这也是一种实现方式。

到此这篇关于vue实现下拉框二级联动效果的文章就介绍到这了,更多相关vue下拉框二级联动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue arco.design锚点Anchor使用方式

    vue arco.design锚点Anchor使用方式

    这篇文章主要介绍了vue arco.design锚点Anchor使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • Element-ui设置el-table表头全选框隐藏或禁用

    Element-ui设置el-table表头全选框隐藏或禁用

    这篇文章主要给大家介绍了关于Element-ui设置el-table表头全选框隐藏或禁用的相关资料,文中手把手教你实现el-table实现跨表格禁用选项,需要的朋友可以参考下
    2023-07-07
  • 解决vue前端rsa加密遇到的问题message too long for RSA

    解决vue前端rsa加密遇到的问题message too long for RS

    这篇文章主要介绍了解决vue前端rsa加密遇到的问题message too long for RSA,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 详解如何配置vue-cli3.0的vue.config.js

    详解如何配置vue-cli3.0的vue.config.js

    这篇文章主要介绍了详解如何配置vue-cli3.0的vue.config.js,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 详解vue3.0 的 Composition API 的一种使用方法

    详解vue3.0 的 Composition API 的一种使用方法

    这篇文章主要介绍了vue3.0 的 Composition API 的一种使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Vue中Vue.extend()的使用及解析

    Vue中Vue.extend()的使用及解析

    这篇文章主要介绍了Vue中Vue.extend()的使用及解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue的路由动态重定向和导航守卫实例

    Vue的路由动态重定向和导航守卫实例

    下面小编就为大家分享一篇Vue的路由动态重定向和导航守卫实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • nuxtjs中如何对axios二次封装

    nuxtjs中如何对axios二次封装

    这篇文章主要介绍了nuxtjs中如何对axios二次封装问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue v-model的用法解析

    vue v-model的用法解析

    这篇文章主要介绍了v-model的基本用法解析,帮助大家更好的理解和学习vue v-model的使用方法,感兴趣的朋友可以了解下
    2020-10-10
  • Vue3渲染器与编译器深入浅析

    Vue3渲染器与编译器深入浅析

    这篇文章主要为大家介绍了Vue3渲染器与编译器深入浅析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02

最新评论