当前位置: 首页 > news >正文

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

<template><div><el-form:model="updateRole"ref="roleForm"label-width="100px"label-position="right"style="width: 400px":rules="roleRules"><el-form-item label="角色名称" prop="name"><el-input v-model="updateRole.name"></el-input></el-form-item><el-tree:data="authList"show-checkboxnode-key="index":default-expanded-all="true":default-checked-keys="checkedKeys"@check-change = "handleCheckChange"ref="tree"></el-tree></el-form></div>
</template><script>
// 引入权限列表对象数组
import menuList from "@/config/menuConfig"
export default {data() {return {updateRole: {name: "",},roleRules: {name: { required: true, message: "请输入角色名称", trigger: "blur" },},authList:[],//树形空间元素数组checkedKeys:[],//树形控件选中项数组};},//  prop接收父组件传递过来的:role信息props: ["role"],mounted() {// 通过props接收到了以后还要在mounted生命周期钩子函数中为updateRole赋值this.updateRole = { ...this.role };this.authList = this.getAuthNodes(menuList);this.checkedKeys = this.role.menus},watch:{role(val){if(val){console.log('val',val);// 更新需要修改的角色对象this.updateRole = {...val}// 更新属性控件选中项数组this.checkedKeys = val.menus// 设置勾选的节点this.$refs['tree'].setCheckedKeys(this.checkedKeys)}}}, components: {},methods: {// 树形控件元素点击回调handleCheckChange(data,checked,indeterminate){if(checked){// 如果选中项不是students并且在选中项数组中不存在,再添加到数组中,防止重复添加if(data.index != "/students" && this.checkedKeys.indexOf(data.index) == -1){this.checkedKeys.push(data.index)}}else{// 判断当前要删除的元素是在数组中存在的let index = this.checkedKeys.indexOf(data.index)if(index != -1 && index != 0){this.checkedKeys.splice(index,1)}}console.log("this.checkedKeys",this.checkedKeys);},// 根据权限列表数组将元素对象中的属性替换为树形控件中的名称getAuthNodes(menuList){return menuList.map((item)=>{// 一级列表if(!item.children){return{index:item.index,label:item.title,};}else{// 多级列表return{index:item.index,label:item.title,// 递归处理多级列表children:this.getAuthNodes(item.children)};}});},// 为父组件提供数据(选中了哪些权限---checkedKeys)getMenus(){this.updateRole.menus = this.checkedKeysreturn this.updateRole}},
};
</script><style scoped>
</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会监听到变化,并执行相应的操作来更新子组件中的相关数据和界面。

 

http://www.lryc.cn/news/177340.html

相关文章:

  • 轻量化设计、佩戴更舒适——轻律 Umelody U1头戴式蓝牙耳机
  • 嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作
  • 外贸人员如何选择适合的邮箱服务
  • pt29django教程
  • 【操作系统笔记七】进程和线程
  • Kakfa高效读写数据
  • C++ 类和对象(4)构造函数
  • 数据结构————广度寻路算法 Breadth First Search(广度优先算法)
  • 安卓桌面记事本便签软件哪个好用?
  • 河北吉力宝以步力宝健康鞋引发的全新生活生态商
  • 反射获取Constructor、Field、Method对象
  • 【Netty】 ByteBuf的常用API总结
  • 热门敏捷开发管理工具
  • Java分支结构:一次不经意的选择,改变了我的一生。
  • Unity中Shader需要了解的点与向量
  • Java初始化大量数据到Neo4j中(一)
  • Excel·VBA日期时间转换提取正则表达式函数
  • Django中的缓存
  • Python 编程基础 | 第二章-基础语法 | 2.4、while 语句
  • Qt Charts简介
  • MinGW、GCC、GNU和MSVC是什么?有什么区别?
  • 引入easyExcel后,导致springboot项目无法开启tomcat
  • Doris数据库FE——启动流程源码详细解析
  • 服务断路器_Resilience4j线程池隔离实现
  • 原神启动原神启动原神启动原神启动
  • Glide - Android的图像加载和缓存库,专注于平滑滚动
  • 如何使用 API 接口获取商品数据,从申请 API 接口、使用 API 接口到实际应用,一一讲解
  • 苹果 CMS 原生 Java 白菜影视 App 源码【带打包教程】
  • Flutter开发之Package与Plugin
  • [极客大挑战 2019]RCE ME 取反绕过正则匹配 绕过disable_function设置