• watch()监听vue2项目角色权限变化更新挂载


    1. <script>
    2. // 引入权限列表对象数组
    3. import menuList from "@/config/menuConfig"
    4. export default {
    5. data() {
    6. return {
    7. updateRole: {
    8. name: "",
    9. },
    10. roleRules: {
    11. name: { required: true, message: "请输入角色名称", trigger: "blur" },
    12. },
    13. authList:[],//树形空间元素数组
    14. checkedKeys:[],//树形控件选中项数组
    15. };
    16. },
    17. // prop接收父组件传递过来的:role信息
    18. props: ["role"],
    19. mounted() {
    20. // 通过props接收到了以后还要在mounted生命周期钩子函数中为updateRole赋值
    21. this.updateRole = { ...this.role };
    22. this.authList = this.getAuthNodes(menuList);
    23. this.checkedKeys = this.role.menus
    24. },
    25. watch:{
    26. role(val){
    27. if(val){
    28. console.log('val',val);
    29. // 更新需要修改的角色对象
    30. this.updateRole = {...val}
    31. // 更新属性控件选中项数组
    32. this.checkedKeys = val.menus
    33. // 设置勾选的节点
    34. this.$refs['tree'].setCheckedKeys(this.checkedKeys)
    35. }
    36. }
    37. },
    38. components: {},
    39. methods: {
    40. // 树形控件元素点击回调
    41. handleCheckChange(data,checked,indeterminate){
    42. if(checked){
    43. // 如果选中项不是students并且在选中项数组中不存在,再添加到数组中,防止重复添加
    44. if(data.index != "/students" && this.checkedKeys.indexOf(data.index) == -1){
    45. this.checkedKeys.push(data.index)
    46. }
    47. }else{
    48. // 判断当前要删除的元素是在数组中存在的
    49. let index = this.checkedKeys.indexOf(data.index)
    50. if(index != -1 && index != 0){
    51. this.checkedKeys.splice(index,1)
    52. }
    53. }
    54. console.log("this.checkedKeys",this.checkedKeys);
    55. },
    56. // 根据权限列表数组将元素对象中的属性替换为树形控件中的名称
    57. getAuthNodes(menuList){
    58. return menuList.map((item)=>{
    59. // 一级列表
    60. if(!item.children){
    61. return{
    62. index:item.index,
    63. label:item.title,
    64. };
    65. }else{
    66. // 多级列表
    67. return{
    68. index:item.index,
    69. label:item.title,
    70. // 递归处理多级列表
    71. children:this.getAuthNodes(item.children)
    72. };
    73. }
    74. });
    75. },
    76. // 为父组件提供数据(选中了哪些权限---checkedKeys)
    77. getMenus(){
    78. this.updateRole.menus = this.checkedKeys
    79. return this.updateRole
    80. }
    81. },
    82. };
    83. script>
    84. <style scoped>
    85. style>

    在这段代码中,watch监听的role是来自父组件通过props传递给子组件的role属性。在子组件的props属性中定义了props: ["role"],表示子组件接收一个名为role的属性。通过this.role可以获取到父组件传递的role属性的值。在mounted钩子函数中,将父组件传递的role赋值给了updateRole,然后在watch中监听role的变化,一旦role发生变化,就更新updateRole的值,并将选中的菜单项更新到checkedKeys中。

    这段代码中的this.$refs['tree'].setCheckedKeys(this.checkedKeys)的作用是将checkedKeys数组中的值设置为树形控件中的选中项。具体来说,它将根据checkedKeys数组中的索引值来勾选树形控件中对应的节点,实现了将之前选中的权限重新勾选的效果。 

    在这段代码中,role是一个props属性,它来自父组件的传递。因此,role的变化是由父组件决定的。当父组件中传递给子组件的role属性发生变化时,watch会监听到这个变化,并执行相应的回调函数。

    具体来说,在父组件中更新了role属性的值,并传递给子组件时,子组件的role属性会发生变化。这可能是因为父组件中的数据发生了变化,或者是父组件重新渲染了。无论是哪种情况,只要父组件更新了传递给子组件的role属性,子组件中的watch就会监听到这个变化,并执行相应的回调函数。

    在这段代码中,当role发生变化时,watch会执行以下操作:

    • role的值赋给updateRole,用于更新需要修改的角色对象。
    • role.menus的值赋给checkedKeys,用于更新树形控件的选中项数组。
    • 使用this.$refs['tree'].setCheckedKeys(this.checkedKeys)checkedKeys数组中的值设置为树形控件中的选中项。

    总结起来,当父组件更新传递给子组件的role属性时,watch会监听到变化,并执行相应的操作来更新子组件中的相关数据和界面。

     

  • 相关阅读:
    使用ubuntu并安装常用软件
    写给技术人的管理入门知识1:什么是管理
    如何编写列名中带有空格的SQL查询
    【从零开始学习 SystemVerilog】2.2、SystemVerilog 数据类型—— logic 和 bit(新的数据类型)
    .net core 上传文件大小限制
    创建高性能索引
    辅助驾驶功能开发-功能规范篇(24)-3-影子模式功能触发规范
    听书网站模板源码 懒人书院网站源码 苹果cms手机听书网站模版源码 支持手机端
    SpringBoot集成monogoDB
    功夫猫小游戏
  • 原文地址:https://blog.csdn.net/czlj1998/article/details/133361528