• 解决 el-tree setChecked 方法偶尔失效的方法


    目前在大多数公司中,菜单的权限控制都是不可或缺的功能

    在和后端配合做权限控制的时候不可避免的会用到  el-tree

    然而这个组件本身带的坑不少

    我们需要回显对应角色拥有的菜单,在不严格的模式下,父节点的选中会连带子节点的选中

    如果 ,你使用的  setCheckedKeys  ,那么你的回显一定是不正确的

    此时不得不用到另一个方法  setChecked   ,然后你会发现dom 刷新的时候   这个方法又失效了

    原因是:dom树刷新了 ,使得树节点对应的treeId刷新了  

    解决方法如下:在调用setChecked的方法外边包一层延时器(setTimeout)即可解决

    1. <template>
    2. <div class="app-container">
    3. <el-dialog title="权限管理" :visible.sync="menuRelationVis">
    4. <el-tree ref="menuTreeRef"
    5. :data="menuTreeData"
    6. node-key="id"
    7. show-checkbox
    8. :props="{label:'name',children:'children',isLeaf:'leaf'}">
    9. </el-tree>
    10. <br>
    11. <div style="display: flex;justify-content: center;">
    12. <el-button @click="menuRelationVis = false">取消</el-button>
    13. <el-button type="primary" @click="submitMenuRelation">确认</el-button>
    14. </div>
    15. </el-dialog>
    16. </div>
    17. </template>
    18. <script>
    19. import rolesApi from '@/api/roles.js'
    20. export default {
    21. data(){
    22. return{
    23. menuRelationVis:false,
    24. curRoleId:null,
    25. menuTreeData:[]
    26. }
    27. },
    28. methods:{
    29. async menuManage(id){
    30. this.menuRelationVis = true
    31. this.curRoleId = id
    32. await this.getMenuTreeData()
    33. await this.getHasMenuByRoleId(id)
    34. },
    35. getHasMenuByRoleId(id){
    36. rolesApi.queryRoleElement({roleId:id}).then(res=>{
    37. if(res.code === 0){
    38. console.log(this.$refs.menuTreeRef);
    39. res.data.forEach(val => {
    40. let a = setTimeout(()=>{
    41. this.$nextTick(() => {
    42. this.$refs.menuTreeRef.setChecked(val, true, false)
    43. clearTimeout(a)
    44. console.log('setChecked');
    45. })
    46. this.$forceUpdate()
    47. },100)
    48. })
    49. }else{
    50. this.$message.error(res.msg)
    51. }
    52. }).catch(err=>{
    53. this.$message.error('查询角色权限信息失败')
    54. })
    55. },
    56. submitMenuRelation(){
    57. let checkKeys = this.$refs.menuTreeRef.getCheckedKeys()
    58. let halfCheckKeys = this.$refs.menuTreeRef.getHalfCheckedKeys()
    59. rolesApi.relatedElement({
    60. roleId: this.curRoleId,
    61. elementIds: checkKeys.concat(halfCheckKeys)
    62. }).then(res=>{
    63. if(res.code === 0){
    64. this.menuRelationVis = false
    65. this.$message.success('修改角色权限成功')
    66. }else{
    67. this.$message.error(res.msg)
    68. }
    69. }).catch(err=>{
    70. this.$message.error('修改角色权限失败')
    71. })
    72. }
    73. }
    74. }
    75. </script>

  • 相关阅读:
    iframe的src可以引入任何源,但是二者如果想通信的话,必须是同源,如果是非同源,如何解决?
    部署MongoDB复制集群(最全)
    Zbrush 导出置换 然后导入vray 在 3ds max 和 maya 设置
    第二章 使用管理门户监视IRIS - 系统使用情况指示器
    DB307S-ASEMI整流桥DB307S
    高效批量剪辑,轻松缩小视频尺寸!一键解决视频文件大小问题!
    蓝桥杯算法双周赛心得——迷宫逃脱(记忆化搜索)
    2022-12-05 优化el-tree懒加载选人树
    【spring boot 使用模板引擎】
    回归与聚类算法系列④:岭回归
  • 原文地址:https://blog.csdn.net/weixin_59685936/article/details/133947720