当前位置:   article > 正文

Vue Treeselect树形下拉框的使用

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。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/259251?site
推荐阅读
相关标签
  

闽ICP备14008679号