zoukankan      html  css  js  c++  java
  • element Ui的级联选择器 任意一级选中下拉框自动关闭

    封装成一个子组件

    <template>
      <el-cascader
        v-model="value"
        clearable
        placeholder="请选择"
        ref="cascaderHandle"
        :options="searchOptions"
        :disabled="disabled"
        filterable
        :props="{ checkStrictly: true, expandTrigger: 'hover' }"
        :before-filter="beforeFilter"
        @focus="focus"
        @blur="blur">
      </el-cascader>
    </template>
    
    <script>
    export default {
      name: 'cascaderInput',
      model: {
        prop: 'data',
        event: 'change'
      },
      props: {
        data: {
          type: Array,
          default: ''
        },
        options: {
          type: Array,
          default: () => {
            return []
          }
        },
        disabled:{
          type: Boolean,
          default: false
        }
      },
      data () {
        return {
          keyword: this.data.join('/'),
          value: this.data,
          flag: 0
        }
      },
      computed: {
        search() {
          const k = this.keyword
          let result = [{label: k, value: k}]
          if(this.isJsonString(k)) {
            result[0] = {label: JSON.parse(k).label || k, value: k}
          }
          return result
        },
        searchOptions() {
          return this.options.concat(this.search)
        },
      },
      methods: {
        isJsonString(str) {
          let result = true
          try{
            JSON.parse(str)
          }catch(erro){
            result = false
          }
          return result
        },
        beforeFilter(keyword) {
          this.keyword = keyword
          this.value = [ keyword ]
        },
        focus(e) {
          (this.flag == 0) && (e.target.addEventListener('keyup', this.keyup, false));
          this.flag++;
        },
        blur(e) {
        },
        keyup(e) {
          let value = e.target.value
          if(value.length == 0) {
            /*this.keyword = '无';*/
            this.value = []
          }
        },
      },
      watch: {
        value: {
          deep: true,
          handler(v,e) {
            this.$emit('change', v)
            if(this.$refs.cascaderHandle) {
              var children = this.$refs.cascaderHandle.getCheckedNodes();
              // if(children[0].children.length < 1){   //判断有没有下级
                this.$refs.cascaderHandle.dropDownVisible = false; //监听值发生变化就关闭它
              // }
            }
          }
        },
        data: {
          deep: true,
          handler(v) {
            if(v.length == 1) this.keyword = v.join('/');
            this.value = Array.isArray(v) ? v : v.split('/')
          }
        }
      }
    }
    </script>
    
  • 相关阅读:
    Java lamda Stream
    java动态绑定的一点注意
    javascript的一点学习
    阶段总结
    some notes about spring aop
    java 命令notes
    Guava cache
    位运算
    解析JDK 7的动态类型语言支持
    Maven里面多环境下的属性过滤(配置)
  • 原文地址:https://www.cnblogs.com/lml-lml/p/12220733.html
Copyright © 2011-2022 走看看