• Vue Treeselect树形下拉框的使用


        昨天在做一个表单,里面有一项是以tree形式为选项的select框↓ 

        于是乎,用到了vue中的treeselect组件,在此记录一下。

     有几个比较重要的点:

    1、绑值, :value=“form.astdeptId”,主要绑的就是id或者code,通过id或code找到对应的label回显
    2、options是数据源,正常调接口获取就行了
    3、append-to-body="true"这个最好加上,可能会遇到下拉的弹窗打不开或者只有一点点高的情况
    4、normalizer就是把我们自己的后端返的数据格式按树插件需要的格式转换
    5、select点击事件里赋值
    6、插槽slot=“option-label” 是下拉框的值
    7、插槽slot=“value-label” 是输入框回显的值

    使用

    1.放入目标位置

    1. <el-form-item label="父节点" v-model="formData.parentCategoryKey">
    2. <listBoxF>
    3. <template slot="content">
    4. <treeselect class="treeSelect-option" v-model="value" :multiple="multiple" :normalizer="normalizer" :options="list" placeholder="请选择" @select="selectNode" />
    5. template>
    6. listBoxF>
    7. el-form-item>

    2. 用watch来监听value的变化

    1. watch:{
    2. // 监听选中值的变化
    3. value:{
    4. deep:true,
    5. handler(val){
    6. this.$emit('getSelectVal',val)
    7. }
    8. }
    9. },

    3.一定要记得设置好替换的字段 

    1. // 自定义参数键值名称
    2. normalizer(node){
    3. //去掉children=[]的children属性
    4. if(node.children && !node.children.length){
    5. delete node.children;
    6. }
    7. return {
    8. id: node.categoryKey,
    9. label: node.categoryName,
    10. children: node.children,
    11. level: node.level
    12. }
    13. },

    4. 选中的时候,进行相关赋值操作

    1. selectNode(node){
    2. this.formData.level=node.level+1
    3. this.formData.parentCategoryKey=node.categoryKey || ''
    4. this.value=node.categoryKey
    5. console.log("selectNode(node):",this.formData)
    6. },

    5. 初始化,一定要写null,否则默认情况下会出现 unknown

    1. created(){
    2. // console.log(this.value,this.formData)
    3. this.getTree()
    4. this.reset()
    5. if(this.formData.parentCategoryKey){
    6. this.value=this.formData.parentCategoryKey
    7. }else{
    8. this.value=null
    9. }
    10. }

    附加:里面我用到的插槽

    1. <template>
    2. <div class="clearfix list-box-f">
    3. <div class="text">
    4. <slot name="name">slot>
    5. div>
    6. <div class="cont">
    7. <slot name="content">slot>
    8. div>
    9. div>
    10. template>
    11. <script>
    12. export default {
    13. name: 'list-box-f'
    14. }
    15. script>
    16. <style lang="scss" rel="stylesheet/scss">
    17. .list-box-f {
    18. margin-bottom: 20px;
    19. &:last-child {
    20. margin-bottom: 0;
    21. }
    22. .text {
    23. width: 144px;
    24. float: left;
    25. text-align: right;
    26. line-height: 32px;
    27. padding-right: 8px;
    28. >strong {
    29. color: #ff0000;
    30. padding-right: 4px;
    31. }
    32. }
    33. .cont {
    34. // width: calc(100% - 162px);
    35. float: left;
    36. .textarea-content {
    37. .v-input {
    38. textarea {
    39. min-height: 400px !important;
    40. font-size: 12px;
    41. }
    42. }
    43. }
    44. >.v-radio-group,>.ans-radio-group {
    45. padding-top: 7px;
    46. }
    47. >.v-input {
    48. textarea {
    49. height: 70px;
    50. }
    51. }
    52. .v-radio-group-item {
    53. font-weight: normal;
    54. margin-top: 1px;
    55. }
    56. }
    57. }
    58. style>

     效果:

     踩坑:

    因为一开始我吧value初始化为''、{}两种方式,都不行,会出现unknown

    最后我改为value,就可以了!

    它是根据id来与label进行匹配的,找不到key他就对不上。 treeselect 绑定的值需要与options输出的id相对应,若是空值,请不要给空字符串,0,等,因为会出现unknown,并且当选择了值以后,会出现选中的值后面会拼上unknown。

    解决办法:把v-modle绑定的值设为null,初始化的时候才不会出现unknown。

  • 相关阅读:
    Python 基础记录 - 第1课
    哈希的应用——布隆过滤器
    代码随想录算法训练营第23期day10 |232.用栈实现队列、225. 用队列实现栈
    【送书活动】用“价值”的视角来看安全:《构建新型网络形态下的网络空间安全体系》
    vue3的那些事
    opencv案例06-基于opencv图像匹配的消防通道障碍物检测与深度yolo检测的对比
    JavaScript【静态方法、实例方法/to类、实例方法/get类、实例方法/set类、Math与Date实操、 JS时间戳、日期互相转换】(九)
    Python+Qt虹膜检测识别
    Opencv实现目标检测
    总建面64万平,配3所幼儿园+54班九年制学校,坪山江岭竹元规划
  • 原文地址:https://blog.csdn.net/Vivien_CC/article/details/127653715