美文网首页
2020-08-28 2020让你的ElementUI el-s

2020-08-28 2020让你的ElementUI el-s

作者: 半眼鱼 | 来源:发表于2020-08-28 09:58 被阅读0次

操让我们更加有经验,这里做了一个elementUI eleselect+tree的下拉组件
功能实现完成,但是有点不完美,选中后无法关闭下拉框

这个是重点 加了一行代码

this.$refs.selectblur.blur();


image.png

页面引用

<SelectTree
            :props="props"
            :options="optionData"
            :clearable="isClearable"
            :accordion="isAccordion"
            :value="valueId"
            @getValue="getValue($event)"
          />

import SelectTree from "./components/treeSelect";


export default {
  components: {
    SelectTree
  },
  data() {
    return {
      privilegeList: [
        {
          id: 1,
          label: "一级 1",
          children: [
            {
              id: 4,
              label: "二级 1-1"
            }
          ]
        },
        {
          id: 2,
          label: "一级 2",
          children: [
            {
              id: 5,
              label: "二级 2-1"
            },
            {
              id: 6,
              label: "二级 2-2"
            }
          ]
        },
        {
          id: 3,
          label: "一级 3",
          children: [
            {
              id: 7,
              label: "二级 3-1"
            },
            {
              id: 8,
              label: "二级 3-2"
            }
          ]
        }
      ],
      isClearable: true, // 可清空(可选)
      isAccordion: true, // 可收起(可选)
      valueId: "",
      props: {
        // 配置项(必选)
        value: "id",
        label: "name",
        children: "children"
        // disabled:true
      }
    };
  },
computed: {
    /* 转树形数据 */
    optionData() {
    //这里如果是后台返回的树形结构可直接引用 不用转换
      let cloneData = JSON.parse(JSON.stringify(this.privilegeList)); // 对源数据深度克隆
      return cloneData.filter(father => {
        // 循环所有项,并添加children属性
        let branchArr = cloneData.filter(child => father.id == child.parentId); // 返回每一项的子级数组
        branchArr.length > 0 ? (father.children = branchArr) : ""; //给父级添加一个children属性,并赋值
        return father.parentId == 0; //返回第一层
      });
      return cloneData;
    }
  },
  methods: {
    getValue(value) {
      console.log(value);
    }
  }
};

下面是组件 可以直接用

<template>
<el-select
:value="valueTitle"
:clearable="clearable"
class="maxwidth"
@clear="clearHandle"
ref="selectblur"

<el-option :value="valueTitle" :label="valueTitle" class="options">
  <el-tree
    id="tree-option"
    ref="selectTree"
    :accordion="accordion"
    :data="options"
    :props="props"
    :node-key="props.value"
    :default-expanded-keys="defaultExpandedKey"
    :expand-on-click-node="false"
    @node-click="handleNodeClick"
  />
</el-option>

</el-select>
</template>

<script>
export default {
name: "ElTreeSelect",
props: {
// 配置项
props: {
type: Object,
default: () => ({
value: "id", // ID字段名
label: "title", // 显示名称
children: "children" // 子级字段名
})
},

// 选项列表数据(树形结构的对象数组)
options: { type: Array, default: () => [] },

// 初始值
value: { type: String, default: null },

// 可清空选项
clearable: { type: Boolean, default: true },

// 自动收起
accordion: { type: Boolean, default: false }

},
data() {
return {
valueId: null,
valueTitle: "",
defaultExpandedKey: []
};
},

watch: {
value() {
this.valueId = "";
this.valueTitle = "";
this.valueId = this.value;
this.initHandle();
}
},
mounted() {
this.valueId = this.value; // 初始值
this.initHandle();
},
methods: {
// 初始化值
initHandle() {
if (this.valueId) {
this.valueTitle = this.refs.selectTree.getNode(this.valueId).data[ this.props.label ]; // 初始化显示 this.refs.selectTree.setCurrentKey(this.valueId); // 设置默认选中
this.defaultExpandedKey = [this.valueId]; // 设置默认展开
}
this.initScroll();
},

// 初始化滚动条
initScroll() {
  this.$nextTick(() => {
    const scrollWrap = document.querySelectorAll(
      ".el-scrollbar .el-select-dropdown__wrap"
    )[0];
    const scrollBar = document.querySelectorAll(
      ".el-scrollbar .el-scrollbar__bar"
    );
    scrollWrap.style.cssText =
      "margin: 0px; max-height: none; overflow: hidden;";
    scrollBar.forEach(ele => (ele.style.width = 0));
  });
},

// 切换选项
handleNodeClick(node) {
  this.$refs.selectblur.blur();//让下拉框失去焦点事件
  this.valueTitle = node[this.props.label];
  this.valueId = node[this.props.value];
  this.$emit("getValue", this.valueId);
  this.defaultExpandedKey = [];
},

// 清除选中
clearHandle() {
  this.valueTitle = "";
  this.valueId = null;
  this.defaultExpandedKey = [];
  this.clearSelected();
  this.$emit("getValue", null);
},

// 清空选中样式
clearSelected() {
  const allNode = document.querySelectorAll("#tree-option .el-tree-node");
  allNode.forEach(element => element.classList.remove("is-current"));
}

}
};
</script>

<style scoped>
.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
height: auto;
max-height: 274px;
padding: 0;
overflow: hidden;
overflow-y: auto;
}
.el-select-dropdown__item.selected {
font-weight: normal;
}
ul li >>> .el-tree .el-tree-node__content {
height: auto;
padding: 0 20px;
}
.el-tree-node__label {
font-weight: normal;
}
.el-tree >>> .is-current .el-tree-node__label {
color: #409eff;
font-weight: 700;
}
.el-tree >>> .is-current .el-tree-node__children .el-tree-node__label {
color: #606266;
font-weight: normal;
}
.maxwidth {
width: 100%;
}
</style>

https://www.jianshu.com/p/61119b7c6f14

相关文章

  • 2020-08-28 2020让你的ElementUI el-s

    操让我们更加有经验,这里做了一个elementUI eleselect+tree的下拉组件功能实现完成,但是有点不...

  • 2020-08-27springcloud

    2020-08-27 无操作 先学一下dubbo,zookeeper,分布式基础 2020-08-28 dubbo...

  • docker 相关问题

    作者时间雨中星辰2020-08-28 1. 将本地镜像推送到远程仓库,报x509: certificate sig...

  • 杨紫中餐厅吃剩菜,背后你不知道的真相

    杨紫中餐厅吃剩菜,背后你不知道的真相 风中划过的飞鸿2020-08-28 17:32:40 1 《中餐厅》的一期节...

  • 重读--一位市委副书记的高考:一名搬运工通过高考改变命运

    【我的读后感】 2020-08-28 重读安永全先生是1945 年生人,1961年8月霍县搬运公司工人;经过刻苦努...

  • 2020-08-29

    2020-08-28 姓名 :曹静杰 企业名称 : 辽宁辽阳丛迪服装有限公司 组别 388期 反省1组 志工529...

  • 若水日记/26/ 等待

    2020-08-28 星期五 小雨转多云 夜凉如水,早晨起来仍飘着微雨。 秋的气息已渗入到骨骼,我将身上的短袖衣服...

  • 写给陌生人的第602封信

    写给陌生人的第602封信 陌生人: 你好。见信佳!周五快乐。 我是写信人。 这封信写于2020-08-28。 这是...

  • 慢性腹泻体质的调理日记

    2020-08-28 慢性腹泻很多年了,记忆力是从研究生开始,研二夏天就开始了,有的时候拉的严重,肚子酸溜溜,工作...

  • 2020-08-28

    2020-08-28 吸引力法则七期二阶 教练-卢颖丽 一、照镜子:美女早上好!我爱你!亲吻自己! 感悟:喜欢自己...

网友评论

      本文标题:2020-08-28 2020让你的ElementUI el-s

      本文链接:https://www.haomeiwen.com/subject/vfgksktx.html