element下拉树选择组件封装

Posted 包子源

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了element下拉树选择组件封装相关的知识,希望对你有一定的参考价值。

使用el-select和el-tree组件,实现下拉树选择组件封装,先看一下效果吧:

封装组件SelectTree.vue

<!-- 树状选择器 -->
<template>
  <el-select
    ref="mySelect"
    v-model="treeName"
    placeholder="请选择"
  >
    <el-option :value="treeName" style="height: auto">
      <el-tree
        :expand-on-click-node="false"
        :data="data"
        default-expand-all
        node-key="id"
        ref="seltree"
        highlight-current
        :props="props"
        @node-click="treeChange"
      ></el-tree>
    </el-option>
  </el-select>
</template>

<script>
export default {
  name: "Pagination",
  props: {
    data: {
      type: [Array, Object]
    },
    props: {
      type: [Object]
    },
    value: {
      type: [Number, String]
    }
  },
  data() {
    return {
      treeName: ""
    };
  },
  watch: {
    value(val) {
      if (val) {
        if (this.$refs["seltree"]) {
          this.$refs["seltree"].setCurrentKey(val);
          this.treeName = this.$refs["seltree"].getCurrentNode(val)[
            this.props.label
          ];
        }
      } else {
        this.$refs["seltree"].setCurrentKey(null);
        this.treeName = "";
      }
    }
  },
  mounted() {
    if (this.value) {
      if (this.$refs["seltree"]) {
        this.$refs["seltree"].setCurrentKey(this.value);
        this.treeName = this.$refs["seltree"].getCurrentNode(this.value)[
          this.props.label
        ];
      }
    } else {
      this.$refs["seltree"].setCurrentKey(null);
      this.treeName = "";
    }
  },
  methods: {
    treeChange(data) {
      this.$emit("treeEvent", data.id);
      this.treeName = data[this.props.label];
      this.$refs.mySelect.handleClose();
    }
  }
};
</script>

使用方法:

<select-tree
  :value="form.area"
  :data="treeData"
  :props="treeProps"
  @treeEvent="treeEvent"
></select-tree>
data() {
  return {
	treeProps: {
	  children: "children",
	  label: "regionName"
	},
	treeData: [],
	form: {
	  area: ""
	},
  }
},
methods: {
  treeEvent(val) {
    this.form.area = val;
  }
}

数据格式:

[
    {
        "orderNo":"1",
        "id":320000,
        "parentId":0,
        "children":[
            {
                "orderNo":"1.1",
                "id":320100,
                "parentId":320000,
                "children":[
                    {
                        "orderNo":"1.1.1",
                        "id":320102,
                        "parentId":320100,
                        "children":null,
                        "regionName":"玄武区"
                    },
                    {
                        "orderNo":"1.1.11",
                        "id":320118,
                        "parentId":320100,
                        "children":null,
                        "regionName":"高淳区"
                    }
                ],
                "regionName":"南京市"
            },
            {
                "orderNo":"1.2",
                "id":320900,
                "parentId":320000,
                "children":[
                    {
                        "orderNo":"1.2.1",
                        "id":320902,
                        "parentId":320900,
                        "children":null,
                        "regionName":"亭湖区"
                    },
                    {
                        "orderNo":"1.2.9",
                        "id":320981,
                        "parentId":320900,
                        "children":null,
                        "regionName":"东台市"
                    }
                ],
                "regionName":"盐城市"
            }
        ],
        "regionName":"江苏省"
    }
]

以上是关于element下拉树选择组件封装的主要内容,如果未能解决你的问题,请参考以下文章

element下拉树选择组件封装

element Cascader 级联选择器动态加载实例

vue+element 支持模糊搜索的多选下拉列表封装(可直接使用)

element Ui的级联选择器 任意一级选中下拉框自动关闭

微信小程序原生开发功能合集二:下拉选择组件封装

Element-UI的组件改造的树形选择器(树形下拉框)