vue基于element-ui实现的动态多级联动下拉选择
<template> <div id="app"> <!-- <select v-for="(arrItem, key) in selectList" v-model="selectArr[key]" @focus="position = key" @change="selected" :key="key" style="margin: 10px; padding: 10px" > <option v-for="item in arrItem" :value="item.value" :key="item.value"> {{ item.label }} </option> </select> --> <!-- <p>选中项: {{ selectArr }}</p> --> <el-select v-for="(arrItem, key) in selectList" :key="key" v-model="selectArr[key]" filterable placeholder="请选择" value-key="value" @change="selected" @focus="position = key" class="mg10" > <el-option v-for="item in arrItem" :key="item.value" :label="item.label" :value="item" > </el-option> </el-select> <p class="mg10">选中项:{{ selectArr }}</p> </div> </template> <script> export default { data() { return { position: null, selectArr: ["第1级-选项1"], selectList: [ [ { value: "第1级-选项1", label: "第1级-选项1", }, { value: "第1级-选项2", label: "第1级-选项2", }, { value: "第1级-选项3", label: "第1级-选项3", }, { value: "第1级-选项4", label: "第1级-选项4", }, { value: "第1级-选项5", label: "第1级-选项5", }, ], ], }; }, methods: { //模拟获取下一级选项(实际项目可通过接口获取或者根据实际情况自行修改) addSelectList(index) { return [ { value: "第" + (index + 2) + "级-选项1", label: "第" + (index + 2) + "级-选项1", }, { value: "第" + (index + 2) + "级-选项2", label: "第" + (index + 2) + "级-选项2", }, { value: "第" + (index + 2) + "级-选项3", label: "第" + (index + 2) + "级-选项3", }, { value: "第" + (index + 2) + "级-选项4", label: "第" + (index + 2) + "级-选项4", }, { value: "第" + (index + 2) + "级-选项5", label: "第" + (index + 2) + "级-选项5", }, ]; }, selected(item) { // console.log(item); // item为当前选中项的对象 var nextSelect = this.addSelectList(this.position); this.selectList.splice( this.position + 1, this.selectList.length, nextSelect ); this.selectArr.splice(this.position + 1, this.selectArr.length); }, // selected(e) { // var current = e.target.value; //获取选中值(实际项目可通过此值调接口获取下一级选项) // var nextSelect = this.addSelectList(this.position); //模拟获取下一级选项 // this.selectList.splice( // this.position + 1, // this.selectList.length, // nextSelect // ); // this.selectArr.splice(this.position + 1, this.selectArr.length); // }, }, }; </script> <style scoped> </style>
<!-- 引入element-ui样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <style>.mg10 { margin: 10px } </style> <div id="app"> <el-select v-for="(arrItem,key) in selectList" :key="key" v-model="selectArr[key]" filterable placeholder="请选择" value-key="value" @change="selected" @focus="position=key" class="mg10"> <el-option v-for="item in arrItem" :key="item.value" :label="item.label" :value="item"> </el-option> </el-select> <p class="mg10"> 选中项:{{selectArr}} </p> </div> <!-- 引入vue --> <script src="https://cdn.jsdelivr.net/npm/vue"> </script> <!-- 引入element-ui组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"> </script> <script>var vm = new Vue({ el: '#app', data: { position: null, selectArr: [], selectList: [[{ value: '第1级-选项1', label: '第1级-选项1' }, { value: '第1级-选项2', label: '第1级-选项2' }, { value: '第1级-选项3', label: '第1级-选项3' }, { value: '第1级-选项4', label: '第1级-选项4' }, { value: '第1级-选项5', label: '第1级-选项5' }]] }, methods: { //模拟获取下一级选项(实际项目可通过接口获取或者根据实际情况自行修改) addSelectList(index) { return [{ value: '第' + (index + 2) + '级-选项1', label: '第' + (index + 2) + '级-选项1' }, { value: '第' + (index + 2) + '级-选项2', label: '第' + (index + 2) + '级-选项2' }, { value: '第' + (index + 2) + '级-选项3', label: '第' + (index + 2) + '级-选项3' }, { value: '第' + (index + 2) + '级-选项4', label: '第' + (index + 2) + '级-选项4' }, { value: '第' + (index + 2) + '级-选项5', label: '第' + (index + 2) + '级-选项5' }] }, selected(item) { // console.log(item); // item为当前选中项的对象 var nextSelect = this.addSelectList(this.position); this.selectList.splice(this.position + 1, this.selectList.length, nextSelect); this.selectArr.splice(this.position + 1, this.selectArr.length); }, } })</script>
不用element
<template> <div id="app"> <select v-for="(arrItem, key) in selectList" v-model="selectArr[key]" @focus="position = key" @change="selected" :key="key" style="margin: 10px; padding: 10px" > <option v-for="item in arrItem" :value="item.value" :key="item.value"> {{ item.label }} </option> </select> <p>选中项: {{ selectArr }}</p> </div> </template> <script> export default { data() { return { position: null, selectArr: ["第1级-选项1"], selectList: [ [ { value: "第1级-选项1", label: "第1级-选项1", }, { value: "第1级-选项2", label: "第1级-选项2", }, { value: "第1级-选项3", label: "第1级-选项3", }, { value: "第1级-选项4", label: "第1级-选项4", }, { value: "第1级-选项5", label: "第1级-选项5", }, ], ], }; }, methods: { //模拟获取下一级选项(实际项目可通过接口获取或者根据实际情况自行修改) addSelectList(index) { return [ { value: "第" + (index + 2) + "级-选项1", label: "第" + (index + 2) + "级-选项1", }, { value: "第" + (index + 2) + "级-选项2", label: "第" + (index + 2) + "级-选项2", }, { value: "第" + (index + 2) + "级-选项3", label: "第" + (index + 2) + "级-选项3", }, { value: "第" + (index + 2) + "级-选项4", label: "第" + (index + 2) + "级-选项4", }, { value: "第" + (index + 2) + "级-选项5", label: "第" + (index + 2) + "级-选项5", }, ]; }, selected(e) { var current = e.target.value; //获取选中值(实际项目可通过此值调接口获取下一级选项) var nextSelect = this.addSelectList(this.position); //模拟获取下一级选项 this.selectList.splice( this.position + 1, this.selectList.length, nextSelect ); this.selectArr.splice(this.position + 1, this.selectArr.length); }, }, }; </script> <style scoped> </style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探