最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Element的組件改造的樹形選擇器(樹形下拉框)

 更新時(shí)間:2020年02月27日 15:22:28   作者:蔚萊先森  
這篇文章主要介紹了基于Element的組件改造的樹形選擇器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言:由于做項(xiàng)目需要一個(gè)樹形選擇器,項(xiàng)目用的也是element-ui框架,然而它自帶的選擇器組件沒(méi)有樹形選項(xiàng),又不想引入其他的框架組件,于是自己利用el-select和el-tree改造了一個(gè),感覺(jué)還挺好用的,就封裝成了一個(gè)組件,如下圖:

element-ui的el-select組件的選項(xiàng)只能是列表形式:

 改造后的樹形選擇器:

簡(jiǎn)介:此樹形選擇器組件是基于elment-ui框架的el-select和el-tree組件的基礎(chǔ)上改造的,其解決了原el-select組件的選項(xiàng)列表不能是樹形的問(wèn)題,集合了前兩個(gè)組件的屬性和方法封裝成了一個(gè)組件,引入即可使用。其實(shí)現(xiàn)了樹形列表、默認(rèn)展開(kāi)、默認(rèn)選中、清空選值等功能,基本上可以滿足大部分選擇器的使用需求。

主要代碼

組合el-select和el-tree組件:

<template>
 <el-select :value="valueTitle" :clearable="clearable" @clear="clearHandle">
  <el-option :value="valueTitle" :label="valueTitle">
   <el-tree id="tree-option"
    ref="selectTree"
    :accordion="accordion"
    :data="options"
    :props="props"
    :node-key="props.value"  
    :default-expanded-keys="defaultExpandedKey"
    @node-click="handleNodeClick">
   </el-tree>
  </el-option>
 </el-select>
</template>

封裝組件:

<script>
export default {
 name: "el-tree-select",
 props:{
  /* 配置項(xiàng) */
  props:{
   type: Object,
   default:()=>{
    return {
     value:'id',       // ID字段名
     label: 'title',     // 顯示名稱
     children: 'children'  // 子級(jí)字段名
    }
   }
  },
  /* 選項(xiàng)列表數(shù)據(jù)(樹形結(jié)構(gòu)的對(duì)象數(shù)組) */
  options:{
   type: Array,    
   default: ()=>{ return [] }
  },
  /* 初始值 */
  value:{
   type: Number,
   default: ()=>{ return null }
  },
  /* 可清空選項(xiàng) */
  clearable:{
   type:Boolean,
   default:()=>{ return true }
  },
  /* 自動(dòng)收起 */
  accordion:{
   type:Boolean,
   default:()=>{ return false }
  },
 },
 data() {
  return {
   valueId:this.value,  // 初始值
   valueTitle:'',
   defaultExpandedKey:[]  
  }
 },
 mounted(){
  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)    // 設(shè)置默認(rèn)選中
    this.defaultExpandedKey = [this.valueId]   // 設(shè)置默認(rèn)展開(kāi)
   } 
   this.$nextTick(()=>{
    let scrollWrap = document.querySelectorAll('.el-scrollbar .el-select-dropdown__wrap')[0]
    let 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)
   })
 
  },
  // 切換選項(xiàng)
  handleNodeClick(node){
   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(){
   let allNode = document.querySelectorAll('#tree-option .el-tree-node')
   allNode.forEach((element)=>element.classList.remove('is-current'))
  }
 },
 watch: {
  value(){
   this.valueId = this.value
   this.initHandle()
  }
 },
};
</script>

css樣式:

<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;
 }
</style>

查看demo

注意:此樹形選擇器要求的值(options)必須是樹形對(duì)象數(shù)組,如你的值是扁平數(shù)據(jù),需轉(zhuǎn)換成樹形數(shù)據(jù)??蓞⒖?a target="_blank" href="http://m.fzitv.net/article/181502.htm">js實(shí)現(xiàn)無(wú)限層級(jí)樹形數(shù)據(jù)結(jié)構(gòu)(創(chuàng)新算法)

到此這篇關(guān)于基于Element的組件改造的樹形選擇器(樹形下拉框)的文章就介紹到這了,更多相關(guān)Element 樹形選擇器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

鸡泽县| 监利县| 鄂伦春自治旗| 宽城| 茌平县| 赤壁市| 潢川县| 吉安市| 砀山县| 托克托县| 永春县| 长葛市| 嘉善县| 封丘县| 怀宁县| 托克逊县| 宿松县| 平山县| 房产| 乡城县| 云浮市| 尚志市| 石泉县| 那坡县| 陵川县| 江北区| 晋州市| 渑池县| 皮山县| 洛阳市| 图片| 常德市| 巩留县| 华池县| 东乡县| 建昌县| 恩平市| 普兰县| 汝州市| 永胜县| 温宿县|