element-ui 的下拉树
我了解到在 element-ui 中并没有下拉树这个组件,所以只能用<el-select> 组件和<el-tree> 结合来实现
1、html
<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
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;
}
}
})

浙公网安备 33010602011771号