el-Dropdown 两个下拉框之间的动态绑定 实现默认选中值

news/2024/5/10 17:14:16/文章来源:https://blog.csdn.net/weixin_43319713/article/details/128426395

目录

业务场景

官方链接

实现效果

使用框架

代码展示

template代码

script代码

变量定义

事件定义

        onMounted事件

        courseClass事件--课程班级绑定

        defaultValue事件

        optionChange事件

        changeClass事件

                为什么要给课程的每个选项也绑定click事件?作用是什么?

        classChange事件

        getIndex事件

完整代码

总结


业务场景

有时候我们在项目中可能多个下拉框之间的数据具有一个级联绑定关系,通过切换某个下拉框的选项值之后,另一个下拉框的中的选项也随之改变。

这个在项目中是经常使用到的一种场景,今天我来分享分享我们具体的实现和需要注意的一些点

官方链接

Checkbox 多选框:Checkbox 多选框 | Element Plus

实现效果

这篇博客要实现的是课程和班级的一个绑定关系,当页面加载之后给课程和班级下拉框一个默认值,通过切换课程班级下拉框中的选项之后班级下拉框中的选项也随之变换成,当前选中课程下的所有班级名

使用框架

Vue3+element-plus(1.2.0-beta.5)

代码展示

template代码

<!-- 课程 --><span style="margin-left: 110px">课程:</span><el-selectv-model="allCourse"filterableplaceholder="请选择课程"@change="optionChange()"><el-optionv-for="(item, index) in courseOptions":key="item.value":label="item.label":value="{ value: item.value, label: item.label }"@click="changeClass(index)"/></el-select><!-- 班级 --><span style="margin-left: 80px">班级:</span><el-selectv-model="allClass"filterableplaceholder="请选择班级"@change="classChange()"><el-optionv-for="item in classOptions":key="item.value":label="item.label":value="{ value: item.value, label: item.label }"/></el-select>

script代码

变量定义

//课程
const allCourse = ref("");//班级
const allClass = ref({id: "",name: "",
});//课程选项
const courseOptions = ref([]);//班级选项
const classOptions = ref([]);

事件定义

onMounted事件

当页面一加载就对课程和班级下拉框赋一个默认值这里的课程ID和班级ID的变量是从缓存中获取的,你们也可以修改成自己需要的onMounted(() => {console.log("进入到onMounted了");courseClass();classID.value = localStorage.getItem("classId");courseID.value = localStorage.getItem("courseId");//班级名称coursename.value = localStorage.getItem("className");//课程名称coursename.value = localStorage.getItem("courseName");});

courseClass事件--课程班级绑定

在实例中班级和课程的信息是调用后端接口获取到的。

//课程-班级级联
async function courseClass() {try {await getCourseIdAndClassId({cookie: localStorage.getItem("cookie"),userCode: localStorage.getItem("phone"),status: "teach",}).then((res) => {CourseAndClass.value = res;// for循环将所有的课程id与name组成courseOptionsfor (let i = 0; i < res.length; i++) {var o = new Object();o.value = res[i].id;o.label = res[i].name;o.classInfo = res[i].classInfo;courseOptions.value.push(o);}// 获取缓存中的值defaultValue();});} catch (error) {console.log(error);}
}

defaultValue事件

// 课程与班级下拉框的默认值
function defaultValue() {//为下拉框进行一个默认选中功能var index = courseOptions.value.findIndex((item) => {//判断当前遍历元素的label值(课程名称)是否与缓存中的一致if (item.label == localStorage.getItem("courseName")) {//一致,返回true,并且将当前元素的index赋值给变量return true;}});//获取课程数组中指定索引的课程allCourse.value = courseOptions.value[index];// 获取classgetIndex(index);//为下拉框进行一个默认选中功能var proNum = classOptions.value.findIndex((item) => {//判断当前遍历元素的label值(班级名称)是否与缓存中的一致if (item.label == localStorage.getItem("className")) {//一致,返回true,并且将当前元素的index赋值给变量return true;}});//获取课程数组中指定索引的班级allClass.value = classOptions.value[proNum];
}

optionChange事件

// 课程选择器的变化事件
async function optionChange() {// 清空当前班级的下拉框allClass.value = [];
}

changeClass事件

//重选课程后,班级为重选课程的第一个班级function changeClass(index) {searchContent.value = "";//班级为默认班级getIndex(index);allClass.value = classOptions.value[0];//课程总时长和已推送活动总时长courseID.value = allCourse.value.value;classID.value = allClass.value.value;coursename.value = allCourse.value.label;classname.value = allClass.value.label;courseAllTime(courseID.value);pushedActivityTime(classID.value, courseID.value);//表格数据currentPage.value = 1;studentData(allClass.value.value,courseOptions.value[index].value,currentPage.value,pageSize.value);//更新导出ExceltableData.value = [];getAllStuStudying(courseID.value, classID.value);excelHandle(true);//导出Excel时文件名称title.value =coursename.value + "--" + classname.value + "--学生学习数据";}

为什么要给课程的每个选项也绑定click事件?作用是什么?

这里想要实现的效果是当对课程下拉框重新选择之后,班级下拉框也能够实现同步改变,给一个默认选项。从整体业务场景来看,防止用户在选择了课程下拉框之后班级下拉框不改变,给用户造成触发事件失效等现象

classChange事件

//班级改变重新获取值进行存储
async function classChange() {//存储课程与班级id,到变量中courseID.value = allCourse.value.value;classID.value = allClass.value.value;coursename.value = allCourse.value.label;classname.value = allClass.value.label;     
}

getIndex事件

// 单击下拉框
function getIndex(index) {// 获取课程中的索引进行查询到该课程下的班级var body = CourseAndClass.value[index].classInfo;classOptions.value = [];for (let i = 0; i < body.length; i++) {var o = new Object();o.value = body[i].id;o.label = body[i].name;classOptions.value.push(o);}
}

完整代码

<template><div><div style="color: #409eff; font-size: 20px"><!-- 课程 --><span style="margin-left: 110px">课程:</span><el-selectv-model="allCourse"filterableplaceholder="请选择课程"@change="optionChange()"><el-optionv-for="(item, index) in courseOptions":key="item.value":label="item.label":value="{ value: item.value, label: item.label }"@click="changeClass(index)"/></el-select><!-- 班级 --><span style="margin-left: 80px">班级:</span><el-selectv-model="allClass"filterableplaceholder="请选择班级"@change="classChange()"><el-optionv-for="item in classOptions":key="item.value":label="item.label":value="{ value: item.value, label: item.label }"/></el-select></div></div></template><script>
import { reactive, ref, onMounted } from "vue";
import { Grid } from "@element-plus/icons-vue";
import {getAllChapterTimeByCourseId,getCourseIdAndClassId,
} from "@/api/CourseAndClassAndStudentManage/CourseManage";export default {components: {Grid,},setup() {//课程const allCourse = ref("");//班级const allClass = ref({id: "",name: "",});//课程选项const courseOptions = ref([]);//班级选项const classOptions = ref([]);onMounted(() => {console.log("进入到onMounted了");courseClass();classID.value = localStorage.getItem("classId");courseID.value = localStorage.getItem("courseId");//班级名称coursename.value = localStorage.getItem("className");//课程名称coursename.value = localStorage.getItem("courseName");});// 课程选择器的变化事件async function optionChange() {// 清空当前班级的下拉框allClass.value = [];}//班级改变重新获取值进行存储async function classChange() {//存储课程与班级id,到变量中courseID.value = allCourse.value.value;classID.value = allClass.value.value;coursename.value = allCourse.value.label;classname.value = allClass.value.label;     }// 课程与班级下拉框的默认值function defaultValue() {//为下拉框进行一个默认选中功能var index = courseOptions.value.findIndex((item) => {//判断当前遍历元素的label值(课程名称)是否与缓存中的一致if (item.label == localStorage.getItem("courseName")) {//一致,返回true,并且将当前元素的index赋值给变量return true;}});//获取课程数组中指定索引的课程allCourse.value = courseOptions.value[index];// 获取classgetIndex(index);//为下拉框进行一个默认选中功能var proNum = classOptions.value.findIndex((item) => {//判断当前遍历元素的label值(班级名称)是否与缓存中的一致if (item.label == localStorage.getItem("className")) {//一致,返回true,并且将当前元素的index赋值给变量return true;}});//获取课程数组中指定索引的班级allClass.value = classOptions.value[proNum];}//重选课程后,班级为重选课程的第一个班级function changeClass(index) {//班级为默认班级getIndex(index);//给班级下拉框默认勾选第一个班级allClass.value = classOptions.value[0];//重新获取课程班级的ID和名称courseID.value = allCourse.value.value;classID.value = allClass.value.value;coursename.value = allCourse.value.label;classname.value = allClass.value.label;      }// 单击下拉框function getIndex(index) {// 获取课程中的索引进行查询到该课程下的班级var body = CourseAndClass.value[index].classInfo;classOptions.value = [];for (let i = 0; i < body.length; i++) {var o = new Object();o.value = body[i].id;o.label = body[i].name;classOptions.value.push(o);}}//课程-班级级联async function courseClass() {try {await getCourseIdAndClassId({cookie: localStorage.getItem("cookie"),userCode: localStorage.getItem("phone"),status: "teach",}).then((res) => {CourseAndClass.value = res;// for循环将所有的课程id与name组成courseOptionsfor (let i = 0; i < res.length; i++) {var o = new Object();o.value = res[i].id;o.label = res[i].name;o.classInfo = res[i].classInfo;courseOptions.value.push(o);}// 获取缓存中的值defaultValue();});} catch (error) {console.log(error);}}return {changeClass,courseID,classID,coursename,classname,    defalutCourse,defalutClass,    CourseAndClass,allCourse,courseOptions,allClass,classOptions,optionChange,classChange,defaultValue,courseClass,getIndex,loading,    checkBoxGroup,reload,};},
};
</script><style></style>

总结

多看官方文档,我们遇到的很多问题其实文档中都有详细说明。

如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞、收藏脚印支持一下博主~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_616855.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文字对称中的数学与魔术(二)——英文字母到单词的对称性

早点关注我&#xff0c;精彩不错过&#xff01;在上一篇文章中&#xff0c;我们引入了语言文字对称性这个领域&#xff0c;重点介绍了阿拉伯数字的对称性&#xff0c;相关内容请戳&#xff1a;文字对称中的数学与魔术&#xff08;一&#xff09;——阿拉伯数字的对称性今天我们…

el-pagination 动态切换每页条数、页数切换

目录 业务场景 官方链接 实现效果 使用框架 代码展示 template代码 script代码 变量定义 事件定义 handleSizeChange事件--实现每页条数改变表格动态变化 handleCurrentChange事件--切换页码 css代码 完整代码 总结 业务场景 当表格中的数据量如果非常庞大的时候我们…

2022-忙碌的一年

&#xff08;点击即可听音频&#xff09;前言花有重开日,人无再少年.每当这个时候,回头驻足,不是感慨万千,就是惜时如金,一年悄无声息的从指尖划过,星海横流,岁月如碑.那些被偷走的时光,发生了大大小小的事无论是平淡无奇,还是历久难忘,有惊喜,有遗憾,终将都会隐入尘烟。大到国…

【Vant相关知识】

目录 1 什么是Vant 2 Vant的优势 3 Vant特性 4 第一个Vant程序 4.1 创建Vue项目 4.2 安装Vant支持 4.3 添加Vant引用 5 按钮组件 6 表单页面 7 area省市区选择 8 商品列表 1 什么是Vant Vant是一个轻量&#xff0c;可靠的移动端组件库&#xff0c;2017开源 目前 Va…

力扣(LeetCode)200. 岛屿数量(C++)

深度优先遍历 求连通块数量。可以遍历所有格子&#xff0c;当格子是岛屿&#xff0c;对岛屿深度优先遍历&#xff0c;找到整个岛&#xff0c;并且将遍历的岛屿标记&#xff0c;以免重复遍历&#xff0c;或递归死循环。标记可以使用状态数组&#xff0c;也可以修改格子的值。本…

【源码共读】Css-In-Js 的实现 classNames 库

classNames是一个简单的且实用的JavaScript应用程序&#xff0c;可以有条件的将多个类名组合在一起。它是一个非常有用的工具&#xff0c;可以用来动态的添加或者删除类名。 仓库地址&#xff1a;classNames 使用 根据classNames的README&#xff0c;可以发现库的作者对这个…

我国牛血清行业现状:FBS是最常用血清添加剂 但目前市场亟需规范化

根据观研报告网发布的《中国牛血清行业现状深度研究与投资前景分析报告&#xff08;2022-2029年&#xff09;》显示&#xff0c;牛血清是血清的一种&#xff0c;是一种浅黄色澄清、无溶血、无异物稍粘稠液体&#xff0c;内含有各种血浆蛋白、多肽、脂肪、碳水化合物、生长因子、…

Unity下如何实现RTMP或RTSP流播放和录制

技术背景 在探讨Unity平台RTMP或RTSP直播流数据播放和录制之前&#xff0c;我们先简单回顾下RTSP或RTMP直播流数据在Unity平台的播放流程&#xff1a; 通过Native RTSP或RTSP直播播放SDK回调RGB/YUV420/NV12等其中的一种未压缩的图像格式&#xff1b;Unity下创建相应的RGB/YU…

c# winform 重启自己 简单实现

1.情景 有些时候&#xff0c;系统会出问题&#xff0c;问题原因很难排除&#xff0c;但是重启问题就能修正&#xff0c;这时候我们就需要在一个检测到问题的时机&#xff0c;让系统进行一次重启。 2.代码 using System; using System.Windows.Forms;namespace 程序重启自己 …

IDEA创建kotlin项目

今天新建了一个kotlin项目&#xff0c;竟然不能导入jar包&#xff0c;原因是新建项目的时候&#xff0c;选择了kotlin作为Gradle的开发语音&#xff0c;kotlin语音里面&#xff0c;下面这行配置识别不了&#xff1a; implementation fileTree(dir: libs, include: [*.jar])所以…

Selenium 常用函数总结

Seleninum作为自动化测试的工具&#xff0c;自然是提供了很多自动化操作的函数&#xff0c; 下面列举下个人觉得比较常用的函数&#xff0c;更多可见官方文档&#xff1a; 官方API文档&#xff1a; http://seleniumhq.github.io/selenium/docs/api/py/api.html 1) 定位元素 f…

Fragment

Fragment简单认识 1.简介 在大屏幕设备上支持更加动态和灵活的UI设计就是一种卡片的设计思路一个Activity可以有多个Fragment&#xff0c;一个Fragment可以被多个Activity使用可以进行动态的添加&#xff0c;替换和删除Fragment有着自己的生命周期&#xff0c;同时受到Activity…

Shiro之授权

授权 1、角色认证 在controller层创建接口 使用shiro中的注解RequiresRoles指定能访问的角色名称 /*** 登录认证角色*/ RequiresRoles("admin") GetMapping("/userLoginRoles") ResponseBody public String userLoginRoles(){System.out.println("…

微信键盘终于正式发布,张小龙说:其目的并不是为了抢夺输入法市场

自从2021年1月份&#xff0c;张小龙在微信公开课透露&#xff1a;微信将上线属于自己的专属输入法&#xff0c;到现在已经快2年过了。 今天终于正式发布了&#xff0c;下面我们一起来体验下。 1、安装 打开App Store&#xff0c;输入“微信键盘”&#xff0c;点击获取就可以…

基于Springboot+Mybatis+mysql+element-vue高校就业管理系统

基于SpringbootMybatismysqlelement-vue高校就业管理系统一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息&#xff08;学生端&#xff09;4.我的应聘(学生端)5.学生信息管理&#xff08;辅导员&#xff09;6.三方协议书审核&#xff08;辅导员&am…

一文读懂Linux内核处理器架构中的栈

栈是什么&#xff1f;栈有什么作用&#xff1f; 首先&#xff0c;栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out)&#xff0c;数据只能在串列的一端 (称为&#xff1a;栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据…

自学编程和计算机科班出身的差别在哪里

前不久逛知乎的时候看到一个问题&#xff1a;自学编程和计算机科班出身的差别在哪里&#xff1f; 自己回答了一下&#xff0c;获得了比较多的点赞和评论&#xff0c;在这里也分享给大家。 985 通信专业学长&#xff0c;转行程序员&#xff0c;聊一聊我的看法&#xff1a;说一千…

YOLOV3论文学习

YOLOv3论文链接&#xff1a;https://pjreddie.com/media/files/papers/YOLOv3.pdf 综述 一、摘要 1、320*320的YOLOv3推理时间22ms&#xff0c;准确率28.2mAP&#xff0c;达到了SSD的精确度&#xff0c;推理速度却快了三倍。 2、基于.5mAp Iou 的YOLOv3的检测效果还比较不错&a…

Doo Prime 为泰国 SOS 儿童村送温暖,公益有起点爱心无疆界

一年一度的圣诞节即将来临&#xff0c;在这欢乐的时刻&#xff0c; Doo Prime 荣幸地宣布 &#xff0c;向泰国 SOS 儿童村捐赠了 35 万泰铢 ( 约合 1.23 万美元 )&#xff0c;作为泰国南部城市合艾府 SOS 儿童村的房屋翻修费用。 Doo Prime 希望 SOS 儿童村的孩子们都能在温馨…

Android入门第55天-在Android里使用OKHttp组件访问网络资源

简介 今天的课程开始进入高级课程类了&#xff0c;我们要开始接触网络协议、设备等领域编程了。在今天的课程里我们会使用OKHttp组件来访问网络资源而不是使用Android自带的URLConnection。一个是OKHttp组件更方便二个是OKHttp组件本身就带有异步回调功能。 下面就进入课程。…