当前位置:   article > 正文

elementui的el-select+el-tree+el-input实现可搜索的下拉树组件

elementui的el-select+el-tree+el-input实现可搜索的下拉树组件

部分实现代码如下

<template>
<div>
 <el-select
              v-model="item.TableName"
              placeholder="请选择"
              :disabled="!item.disabled"
              @visible-change="handleVisible"
              ref="TableName"
            >
              <el-input placeholder="请输入关键词" v-model="inputValue" maxlength="40">
                <i slot="suffix" class="el-input__icon el-icon-search" @click="getTreeData"></i>
              </el-input>
              <el-option :value="item.TableName" style="height: 200px; overflow-y: auto">
                <el-tree
                  v-loading="loading"
                  :data="treeData"
                  :index="index"
                  :props="defaultProps"
                  :default-expand-all="expandAll"
                  node-key="puid"
                  highlight-current
                  v-if="refreshTree"
                  @node-click="
                    (data, node, item) =>
                      handleNodeClick(data, node, item, index, 'TableName')
                  "
                />
              </el-option>
            </el-select>
</div>
</template>
  • 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
在这里插入代码片
  • 1
<script>
export default {
  name: '',
  components: {},
  props: {
    defaultProps: { type: Object, default: () => ({}) },
    treeData: { type: Array, required: true, default: () => [] },
  },
  data() {
    return {
      inputValue: '', //树搜索值
  

      expandAll: false, //搜索后全部展开
      refreshTree: true,
      loading: false,
    };
  },
  computed: {},
  methods: {
    // 树模型选中后触发,选中数据赋值到下拉框,判断是否有重复数据,重复的话提示
    handleNodeClick(data, node, item, index, position) {
    操作:自定义
      // 选择后收起下拉菜单
      setTimeout(() => {
        this.$refs[position][index].blur();
      }, 50);
    },
    // 筛选树模型数据;触发父组件搜索接口,修改this.treeData数值即可
    getTreeData() {
      this.loading = true;
     
    },
    // 下拉框出现或隐藏清空输入框值,重新获取所有treeData
    handleVisible() {
      this.inputValue = '';
  
    },
    
   
  },
  watch: {
    // 更新属性
    inputValue: {
      handler(newVal, oldVal) {
        if (newVal !== oldVal) {
         
          // 再次重新请求数据接口即可
        }
      },
      immediate: true,
      deep: true,
    },
  },
 
};
</script>
  • 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
<style lang="scss">
.el-input-group__append,
.el-input-group__prepend {
  padding: 0;
  background: #ffffff;
  font-size: 14px;
}
.el-input-group {
  width: 88%;
  padding: 10px 18px;
}
.el-icon-caret-right:before {
  content: '\e6e0';
}
.el-select-dropdown__item.hover,
.el-select-dropdown__item:hover {
  background: #ffffff;
}
.el-select-dropdown__item {
  padding: 10px 0 0 0;

}
.el-select-dropdown__list {
  padding: 6px 20px;
}
.el-scrollbar__bar.is-vertical {
  display: none;
}
.el-input__icon {
  transform: scale(1.5);
}
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/532417
推荐阅读
相关标签
  

闽ICP备14008679号