• Element树形控件使用过程中遇到的问题及解决方法


    1.需求1点击编辑按钮,出现修改组织弹窗,且将点击时的组织名称返现在输入框中。 

    思路是点击编辑按钮,取到节点点击时返回的data信息中的label进行赋值即可。

    1. <el-tree
    2. style="margin-top: 20px"
    3. :data="organizationTreeData"
    4. node-key="id"
    5. default-expand-all
    6. :expand-on-click-node="false"
    7. v-if="
    8. organizationTreeData.length !== 0 && organizationTreeData !== ''
    9. "
    10. draggable
    11. @node-click="getOrganizationList" //树节点点击事件
    12. >
    13. <span class="custom-tree-node" slot-scope="{ node, data }">
    14. <span>{{ node.label }}span>
    15. <span v-if="data.type !== 1">
    16. <el-button
    17. type="text"
    18. icon="el-icon-plus"
    19. class="edit"
    20. @click="showOrganizationDialog"
    21. >
    22. el-button>
    23. <el-tooltip
    24. class="item"
    25. effect="dark"
    26. content="修改组织"
    27. placement="top"
    28. >
    29. <el-button
    30. type="text"
    31. @click="() => showEditOrganizationDialog(data)"
    32. icon="el-icon-edit"
    33. class="edit"
    34. >
    35. el-button>
    36. el-tooltip>
    37. <el-tooltip
    38. class="item"
    39. effect="dark"
    40. content="禁用组织"
    41. placement="top"
    42. >
    43. <el-popconfirm
    44. title="您确定要禁用组织吗?"
    45. @confirm="deactive"
    46. >
    47. <el-button
    48. slot="reference"
    49. type="text"
    50. icon="el-icon-success"
    51. v-if="node.data.isEnable"
    52. style="margin-left: 10px; color: green"
    53. @click="unEnableOrganization()"
    54. class="restart"
    55. >el-button>
    56. el-popconfirm>
    57. el-tooltip>
    58. <el-tooltip
    59. class="item"
    60. effect="dark"
    61. content="启用组织"
    62. placement="top"
    63. >
    64. <el-popconfirm title="您确定要启用组织吗" @confirm="active">
    65. <el-button
    66. slot="reference"
    67. :type="type"
    68. icon="el-icon-error"
    69. v-if="!node.data.isEnable"
    70. style="margin-left: 10px; color: red"
    71. @click="enableOrganization()"
    72. >el-button>
    73. el-popconfirm>
    74. el-tooltip>
    75. span>
    76. span>
    77. el-tree>
    1. showEditOrganizationDialog() {
    2. this.editOrganizationDialogVisible = true
    3. this.organizationForm.organizationName = this.data.label
    4. },
    5. getOrganizationList(data, node) {
    6. console.log('data', data)
    7. this.data = data //获取到节点信息放到当前的data中
    8. }

    以为这样就可以了,刷新页面发现点第一次的时候输入框并不能回显出组织名称,换一个点击时回显的是上一个点击的组织名称。分析了一下肯定是data赋值没赋上,看一下控制台的输出

     

     确实没有赋值成功,然后看了一下这个输出顺序,以为是JavaScript按顺序执行的原因,调换了两个方法的位置,发现还是这个问题。我的解决办法就是,既然输出顺序一直都是showEditOrganizationDialog中的先输出,那就给它延迟,让它延迟输出这样赋值就能赋上了。修改后的代码

    1. showEditOrganizationDialog() {
    2. this.editOrganizationDialogVisible = true
    3. setTimeout(() => {
    4. this.organizationForm.organizationName = this.data.label
    5. console.log(this.organizationForm.organizationName)
    6. }, 0)
    7. },

     

    2.需求2点击最后的按钮进行组织的禁用启用。 

    首先是根据node节点中isEnable字段判断是启用按钮还是禁用按钮,然后在进行切换。 很简单就是在点击确定的时候修改isEnable字段的值就可以。但就是这样我还是遇到了问题,就是点击第一次进行更改没问题,但是第二次的时候就会报错。

    1. active() {
    2. this.data.isEnable = !this.data.isEnable
    3. },
    4. deactive() {
    5. this.data.isEnable = !this.data.isEnable
    6. },

    报错情况如下:

    这个实例上没有这个方法,我找了一会明明有这个方法啊,为什么会报错呢。然后仔细看了一下代码,我的同事在用条件渲染的时候用的是v-if,当不满足的时候就会删除dom元素,所以第二次的时候根本没有这个dom元素,也就不存在这个方法了。修改方法不用v-if进行条件渲染,使用v-show进行条件渲染即可解决。

     

    解决方法:

     

  • 相关阅读:
    QT编码规范
    058:mapboxGL监听键盘事件,通过panBy控制前后左右移动
    亚马逊、Lazada、Shopee、速卖通、阿里国际、美客多、eBay、沃尔玛测评自养号,产品权重该如何提高?
    详解Istio服务治理技术及环境搭建
    Day709.JShell -Java8后最重要新特性
    1043 输出PATest
    如何在 vue 中使用 svg symbols
    基于matlab GUI的数字图像处理系统
    2022引领箱式仓储新风向|可提升130%存储密度的HEGERLS A42D双深位箱式仓储机器人
    高通导航器软件开发包使用指南(11)
  • 原文地址:https://blog.csdn.net/Zwq8023520/article/details/132882209