vue-treeselect极速实现级联选择功能

24 篇文章 1 订阅
本文介绍了如何在Vue项目中使用Vue-Treeselect组件,包括安装、引入、注册、数据格式及事件处理。组件支持单选、禁用、搜索等功能,并提供了数据初始化方法。同时,文章提及了与el-select组件的兼容性问题以及待解决的自定义图标和展开方式的问题。
摘要由CSDN通过智能技术生成

显示效果如下:

使用方式:

1.先安装

npm install --save '@riophae/vue-treeselect'

2.组件中引入

// import the component

import Treeselect from "@riophae/vue-treeselect";

// import the styles

import "@riophae/vue-treeselect/dist/vue-treeselect.css";

3.组件注册

components: { Treeselect },

4.使用组件

  <treeselect
      v-model="orgId"
      :multiple="false"//是否多选
      :clearable="fasle"//是否使用清空功能
      :async="false"
      :default-expand-level="1"//默认展开第1级菜单,数值越大展开的层级越多
      :is-disabled="false"//
      :searchable="false"//是否启用搜索,true为启用
      placeholder=""
      :normalizer="normalizer"//数据初始化
      :options="orgOptions" //数据option
      @input="handleNodeClick"//当文本框值改变时执行,类似el-select @change
      @open="handleOpen" //当文本框获取焦点打开时执行
  />

5.接口数据格式

组件需要数据格式:

//若封装组件需要传入,如业务不需要从页面传option,可从此页面单独调用接口赋值orgOption
orgOption:{
    type: Array,
    default:()=>{
        return []
    }
}
orgValue:{
    type: String,
    default: ()=>{
        return null //注:当默认值为null或者存在可匹配默认值时,组件不会显示(unknown)
    }
}

6.封装方法数据初始化数据格式

 normalizer(node) {
            // 去掉children=[]的children属性
            if (node.children && !node.children.length) {
                delete node.children;
            }
            return {
                id: node.id,
                label: node.name,
                children: node.children,
                isDisabled: node.isDisabled,//可省略
            };
        },
//绑定值改变时触发
handleNodeClick(e){
    this.$emit('handleNodeClick', e)//往父组件传orgValue
}
//解决与el-select不兼容问题,打开el-select组件后点vue-treeSelect无法关闭el-select > option
handleOpen(){
    this.$emit('handleOpen'); 
}
父组件中:
<TreeSelectComponents :org-value="orgValue?orgValue:null" :org-option="orgOption" @getValue="getValue" @handleOpen="handleOpen" >
//其他el-select
<el-select ref="upSelect0" v-model="value0">option0</el-select>
<el-select ref="upSelect1" v-model="value1">option1</el-select>
<el-select ref="upSelect2" v-model="value2">option2</el-select>
<el-select ref="upSelect3" v-model="value3">option3</el-select>
<el-select ref="upSelect4" v-model="value4">option4</el-select>
methods:{
    getValue(v){
        console.log(v)
    }
    //当vue-treeSelect组件打开时,关闭其他所有el-select
    handleOpen(){
        for (var i=0; i<5; i++) {
            this.$ref.['upSelect' + i].blur()
        }
    }
}

7.内网开发需往node_modules中拷入以下文件,并在package.json中注册组件

 “dependencies”: {

        "@riophae/vue-treeselect": "^0.4.0"

}

8.参考文章

Vue-Treeselect | Vue-Treeselect 中文网

9.以上为具体功能实现方式,另有两个问题暂未解决,一是vue-treeSelect三角标是否可替换,二是只能点击角标展开下拉框。el-select这两点都方便处理,有办法的朋友望留言赐教

`vue-treeselect`是一个基于Vue.js的下拉选择组件,它通常与`Element UI`或自定义的验证规则配合使用来实现Vue表单中的树形选择器验证。以下是实现表单验证的一般步骤: 1. **安装并引入组件**: 首先,在你的项目中安装`vue-treeselect`: ``` npm install vue-treeselect ``` 然后,在你的组件中导入并注册组件。 2. **绑定值到数据**: 将组件的选择结果绑定到Vue实例的数据属性上,比如`selectedValue`。 3. **配置选项**: 初始化`vue-treeselect`组件时,你可以设置允许选择的初始状态、搜索选项等功能,并确保其`value`字段可以用于存储所选节点的值。 4. **添加表单验证规则**: 使用Vue官方的`v-model`指令结合`v-bind`来绑定`selectedValue`,然后在`v-model`上应用验证规则。例如,你可以使用`v-model.trim`去掉空白值,或者根据需求定制更复杂的验证逻辑,如检查是否选择了特定值范围内的选项。 ```html <template> <el-form-item label="树形选择"> <vue-treeselect :options="options" v-model="selectedValue" :clearable="true" /> <span v-if="errors.has('selectedValue')">选择错误信息...</span> </el-form-item> </template> <script> import Vue from 'vue'; import vueTrellSelect from 'vue-treeselect'; export default { components: { vueTrellSelect }, data() { return { selectedValue: '', options: [], errors: new Vue({ messages: {} }).$validation.$refs.errors, }; }, // 添加验证规则 validations: { selectedValue: { required: true, message: '请选择一项', params: {}, }, }, }; </script> ``` 5. **监听校验状态**: 当用户输入改变或表单提交时,可以通过`watch`、`updated`等生命周期钩子或者`$watch`监听`selectedValue`的变化,并根据验证规则更新显示错误消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易66丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值