vue實現(xiàn)下拉框二級聯(lián)動效果的實例代碼
1、實現(xiàn)效果
2、后端返回的數(shù)據(jù)格式
"list": [ { "id": "1178214681118568449", "title": "后端開發(fā)", "children": [ { "id": "1178214681139539969", "title": "Java" }, { "id": "1178585108407984130", "title": "Python" }, { "id": "1454645056483913730", "title": "C++" }, { "id": "1454645056731377666", "title": "C#" } ] }, { "id": "1178214681181483010", "title": "前端開發(fā)", "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": "系統(tǒng)/運(yùn)維", "children": [ { "id": "1178214681353449473", "title": "Linux" }, { "id": "1178214681382809602", "title": "Windows" } ] }, { "id": "1178214681399586817", "title": "數(shù)據(jù)庫", "children": [ { "id": "1178214681428946945", "title": "MySQL" }, { "id": "1178214681454112770", "title": "MongoDB" } ] }, { "id": "1178214681483472898", "title": "大數(shù)據(jù)", "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" } ] } ]
數(shù)據(jù)格式不一定和上面的一樣,我上一篇文章是把這個數(shù)據(jù)格式用在了樹形控件上面,這里放在二級聯(lián)動上面。
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', //默認(rèn)封面圖片 price: 0 }, teacherList:[], //封裝所有的講師數(shù)據(jù) subjectOneList:[], //一級分類 subjectTwoList:[] , //二級分類 BASE_API: process.env.BASE_API // 接口API地址 } }, created() { //頁面渲染之前執(zhí)行 //初始化所有講師 this.getListTeacher() //初始化一級分類 this.getOneSubject() }, methods: { //點擊某個一級分類,會觸發(fā)change事件,顯示對應(yīng)的二級分類 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>
主要思想就是在第一級下拉框發(fā)生單擊事件的時候,我們拿到第一級下拉框的id值(這里你不一定是id值),然后遍歷包含所有數(shù)據(jù)的一級分類集合,找到和當(dāng)前單擊事件選中的一級分類id值相等的那個對象,然后把它的children屬性(我的children在后端是個二級分類的集合)賦值給data屬性里面的二級分類數(shù)組對象subjectTwoList即可。
我這里是后端一次性把所有數(shù)據(jù)都取到了,我在前端遍歷解決的。當(dāng)然,你也可以修改下單擊事件的執(zhí)行邏輯,還有一種方法是每單機(jī)一次,用單擊選中的以及下拉框的鍵去后端查所有的二級分類,再將查到的二級分類賦值給第二個下拉框即可,但這樣效率感覺有點慢,雖然這也是一種實現(xiàn)方式。
到此這篇關(guān)于vue實現(xiàn)下拉框二級聯(lián)動效果的文章就介紹到這了,更多相關(guān)vue下拉框二級聯(lián)動內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+TS實現(xiàn)數(shù)字滾動效果CountTo組件
最近開發(fā)有個需求需要酷炫的文字滾動效果,發(fā)現(xiàn)vue2版本的CountTo組件不適用與Vue3,沒有輪子咋辦,那咱造一個唄,感興趣的小伙伴可以跟隨小編一起了解一下2022-11-11vue-router實現(xiàn)編程式導(dǎo)航的代碼實例
今天小編就為大家分享一篇關(guān)于vue-router實現(xiàn)編程式導(dǎo)航的代碼實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01