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>

原文地址:https://www.cnblogs.com/lml-lml/p/12220733.html

时间: 2024-07-31 21:19:55

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

js选中下拉框的默认选项

//这是修改时选中 $("#type").find("option[value='"+factory+"']").attr("selected",true); 以上代码为初始化页面的时候默认选中下拉框的某一项.

jquery 根据后台返回值来选中下拉框 option 值

前景:下拉列表和要选中的下拉项都是通过后台传过来的本人用字符串拼接很low的方法实现: 一  给下拉框加一个默认的option 放在第一个类似于"无"或者"请选择": 二  把后台返回值放到 option 的一个自定义属性中 : 三  要选的东西在第一个option中取出判断即可: 四 用jquery each遍历 function SelectTrue(){ var a =[]; var i = 0 $(".wuoption").each(fu

基于element ui的级联选择器组件实现的分类后台接口

今天在做资产管理系统的时候遇到一个分类的级联选择器,前端是用的element的组件,需要后台提供接口支持.     这个组件需要传入的数据结构大概是这样的,详细的可参考官方案例: [{ value: '1001', label: 'IT固定资产', children: [{ value: '100101', label: '服务器' }, { value: '100102', label: '笔记本' }, { value: '100103', label: '平板电脑' }, { value:

基于Element UI Cascader 级联选择器的中国省市区级联数据

安装 npm install element-china-area-data -save 在线演示:https://plortinus.github.io/element-china-area-data/index.html github:https://github.com/airyland/china-area-data 引入 import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, 

ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这个功能了,印象中曾经写过这个功能的文章,一下子找不到了,只好重新贴出来备忘.最近博客快2个月没更新了,因为这两个月一直在闭门写书. 引入js和css下载地址:http://download.csdn.net/detail/zouyujie1127/9550279 <link href="~/l

thinkphp中在编辑一条数据时不用JS实现自动选中下拉框

<select name="auth_pid" id="auth_pid"> <option value="0" >--请选择--</option> <volist name="auth_list" id="item"> <eq name="item.auth_id" value="$auth_info.auth_pid&q

element ui 表格提交时获取所有选中的checkbox的数据

<el-table ref="multipleTable" :data="appList" @selection-change="changeFun"> <el-table-column type="selection" width="55" class="selection" prop='uuid' :selectable='checkboxInit' @select

jquery操作select下拉框的多种方法(选中,取值,赋值等)

jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...});   //为Select添加事件,当选择其中一项时触发2. var checkText=$("#select_id").find("option:selected").text();  //获取Select选择的Text3. var checkValue=$("#select

js实现点击下拉框选中对应的div

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js实现点击下拉框选中对应的div</title> <style type="text/css"> div{display:none;} </style> </head> <body> <select name="