element-ui 的下拉树
我了解到在 element-ui 中并没有下拉树这个组件,所以只能用<el-select> 组件和<el-tree> 结合来实现
1、html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | < script src="../resources/js/vue.js"></ script > < script src="../resources/js/element-ui/index.js"></ script > < link href="../resources/css/element-ui/index.css" rel="stylesheet"> < body > < div class="select-trees" id="selectTree"> < el-select v-model="initValue" filterable multiple :clearable="false" :collapse-tags="false" :placeholder="'请选择'+placeholderRemark" class="select-number select-border" popper-class="selectClass" :popper-append-to-body="false" @remove-tag="handlerRemoveTag" @change="changeOption" style="width: 200px"> < el-option :value="optionValue" style="height: auto"> < el-tree show-checkbox ref="tree" node-key="id" empty-text="暂无数据" :data="dataTreeList" :props="propsData" :check-on-click-node="false" :expand-on-click-node="true" :default-checked-keys="selectdArray" @check-change="handleCheckChange"/> </ el-option > </ el-select > </ div > </ body > < script src="../js/selectTree.js" type="module"></ script > |
2、JS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | new Vue({ el: "#selectTree" , data:{ initValue: [], optionValue: [], placeholderRemark: '' , selectdArray: [], resultArray: [], deleteFlag: '' , propsData: { id: 'id' , label: 'name' , children: 'children' }, dataTreeList: [ { id: '01' , name: '水果' , children: [ { id: '0101' , name: '苹果' , children: [ { id: '010101' , name: '红苹果' , children: [] }, { id: '010102' , name: '青苹果' , children: [] }, { id: '010103' , name: '黄苹果' , children: [] } ] }, { id: '0102' , name: '香蕉' , children: [] }, { id: '0103' , name: '橙子' , children: [] } ] }, { id: '02' , name: '动物' , children: [] }, { id: '03' , name: '蔬菜' , children: [] } ] }, methods: { changeOption(item) { console.log( 'select======' , this .initValue, this .optionValue); }, handlerRemoveTag(item) { // 删除选中的tag let removeValue = this .chooseValue( this .resultArray, 'name' , item, 0); this .deleteCharacter( this .optionValue, removeValue.id); this .deleteCharacter( this .selectdArray, removeValue.id); // 同步更新下拉内容 this .$refs.tree.setChecked(removeValue.id, false , true ); }, handleCheckChange(data, checked, indeterminate) { // 下拉树的复选框操作 if (checked) { this .initValue.push(data.name); this .optionValue.push(data.id); this .selectdArray.push(data.id); this .resultArray.push({id: data.id, name: data.name}); } else { this .deleteCharacter( this .initValue, data.name); this .deleteCharacter( this .optionValue, data.id); this .deleteCharacter( this .selectdArray, data.id); this .chooseValue( this .resultArray, 'id' , data.id, 1); } }, deleteCharacter(list, str) { let index = list.indexOf(str); if (index > -1) { list.splice(index, 1); } return list }, chooseValue(list, key, str, type) { let result = null ; list.forEach((item, index)=> { if (item[key] === str) { result = item; list.splice(index, 1); } }); return type ? list : result; } } }) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通