el-tree树形控件过滤所有符合条件的选项

这篇博客介绍了如何在Vue.js应用中使用Element UI库创建一个带有关键词过滤功能的树形组件。通过监听`filterText`的变化,调用`filterNode`方法来过滤树节点。`filterNode`方法根据输入的关键词检查节点的`label`属性,如果包含关键词则保留,否则过滤掉。示例展示了如何处理湖北省、湖南省和河南省的行政区划数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

HTML:

    <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-input>

    <el-tree
      class="filter-tree"
      :data="data"
      :props="defaultProps"
      default-expand-all
      :filter-node-method="filterNode"
      ref="tree"
    >
    </el-tree>

vue:

  watch: {
    filterText(val) {
      this.$refs.tree.filter(val);
    },
  },
  methods: {
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    },
  },
  data() {
    return {
      filterText: "",
      data: [
        {
          id: 1,
          label: "湖北省",
          children: [
            {
              id: 4,
              label: "武汉市",
              children: [
                {
                  id: 9,
                  label: "武昌区",
                },
                {
                  id: 10,
                  label: "江夏区",
                },
              ],
            },
          ],
        },
        {
          id: 2,
          label: "湖南省",
          children: [
            {
              id: 4,
              label: "长沙市",
              children: [
                {
                  id: 9,
                  label: "芙蓉区",
                },
                {
                  id: 10,
                  label: "开福区",
                },
              ],
            },
          ],
        },
        {
          id: 3,
          label: "河南省",
          children: [
            {
              id: 4,
              label: "郑州市",
              children: [
                {
                  id: 9,
                  label: "惠济区",
                },
                {
                  id: 10,
                  label: "金水区",
                },
              ],
            },
          ],
        },
      ], //data是数据
      defaultProps: {
        children: "children",
        label: "label",
      },
    };
  },

        

### ElementUI 中 `el-select` 组件树形结构回显的实现方法 在 VueElementUI 开发中,当需要处理带有树形结构的数据并实现在 `el-select` 下拉框中进行选项回显时,可以按照以下方式进行设计和开发。 #### 数据准备 为了支持树形结构的选择器,通常会定义一个具有父子关系的对象数组作为数据源。例如: ```javascript const treeData = [ { id: '1', label: 'Node 1', children: [ { id: '1-1', label: 'Child Node 1' }, { id: '1-2', label: 'Child Node 2' } ] }, { id: '2', label: 'Node 2' } ]; ``` 此数据可以通过 API 动态获取或者静态配置[^1]。 #### 自定义过滤逻辑 由于标准的 `el-option` 不支持嵌套层次结构展示,因此需自定义渲染模板来适配树状节点。通过 `scoped-slot` 或者插槽扩展功能完成复杂 UI 表达需求的同时保持灵活性。 以下是具体代码片段演示如何构建带树形结构的可筛选下拉菜单组件: ```html <template> <div> <!-- 使用 el-cascader 来模拟树形 select --> <el-cascader v-model="selectedValue" :options="treeData" @change="handleChange" clearable></el-cascader> <!-- 如果坚持使用 el-select,则需要手动解析路径 --> <el-select v-model="selectedText" filterable remote reserve-keyword placeholder="请输入关键词"> <el-tree ref="treeRef" :data="treeData" show-checkbox node-key="id" highlight-current default-expand-all check-on-click-node /> </el-select> </div> </template> <script> export default { data() { return { selectedValue: [], // 存储级联选择的结果 selectedText: '', // 单独存储当前选中文本用于显示 treeData: [] // 初始化为空待加载实际业务数据 }; }, methods: { handleChange(value) { console.log('Selected:', value); }, loadTreeData() { this.treeData = [ { id: '1', label: 'Parent 1', children: [{ id: '1-1', label: 'Child A' }, { id: '1-2', label: 'Child B' }] }, { id: '2', label: 'Parent 2' } ]; } }, mounted() { this.loadTreeData(); // 页面初始化完成后填充数据 } }; </script> ``` 上述例子展示了两种可能的技术路线:一种基于原生 `el-cascader` 控件快速搭建;另一种则尝试融合 `el-select` 加上内部封装好的 `el-tree` 插件形式达成目标效果[^2]。 对于更复杂的场景比如异步加载子项或是跨层联动操作等高级特性,则建议深入研究官方文档以及社区贡献的相关解决方案[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值