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
会监听到变化,并执行相应的操作来更新子组件中的相关数据和界面。
相关文章:
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&…...

轻量化设计、佩戴更舒适——轻律 Umelody U1头戴式蓝牙耳机
头戴式耳机不像以前那么笨重,身边很多人都在用,而且拍照还巨出片,拍照累了还能听歌放松,何乐而不为,国庆节即将来临,秋冬季节也就快要到了,棕色在合适不过了,最近有一款高颜值的复古…...

嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作
嵌入式Linux应用开发-基础知识-第三章 LED原理图-GPIO及操作 第三章 硬件知识_LED 原理图3.1 先来讲讲怎么看原理图 第四章 普适的 GPIO 引脚操作方法4.1 GPIO 模块一般结构4.2 GPIO 寄存器操作4.3 GPIO 的其他功能:防抖动、中断、唤醒 第五章 具体单板的 GPIO 操作…...

外贸人员如何选择适合的邮箱服务
随着互联网和数字技术的快速发展,电子邮件已经成为商务沟通的主要方式之一。对于外贸人员来说,选择一个合适且高效的邮箱服务至关重要。本文将探讨外贸人员在选择外贸邮箱时应考虑的因素,以便找到最适合自己的解决方案。 “外贸人员如何选择合…...
pt29django教程
文件上传 文件上传必须为POST提交方式, 表单<form>中文件上传时必须有带有enctype"multipart/form-data" 时才会包含文件内容数据。 表单中用<input type"file" name"xxx">标签上传文件 名字xxx对应request.FILES[xx…...

【操作系统笔记七】进程和线程
进程的组成 进程要读取 ELF 文件,那么: ① 要知道文件系统的信息,fs_struct② 要知道打开的文件的信息,files_struct 一个进程除了需要读取 ELF 文件外,还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…...

Kakfa高效读写数据
1.概述 无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能:一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,本文也是从这两个方面去剖析Kafk…...
C++ 类和对象(4)构造函数
C的目标之一是让使用类对象就像使用标准类型一样,但是常规的初始化语法不适用于类似类型Stock: int year 2001; struct thing {char * pn;int m; }; thing amabob {"wodget",-23}; //有效初始化 Stock hot {"Sukies Autos…...
数据结构————广度寻路算法 Breadth First Search(广度优先算法)
(一)基础补充 二叉树的基本定义 1)二叉树就是度不超过2的树,其每个结点最多有两个子结点 2)二叉树的结点分为左结点和右结点 代码实现二叉树 #include <stdio.h> #include <stdlib.h> struct Node {int data;struct Node* pLeft;struct Node* pRight; }…...

安卓桌面记事本便签软件哪个好用?
日常生活及工作中,很多人常常会遇到一些一闪而现的灵感,这时候拿出手机想要记录时,却找不到记录的软件。在这个快节奏的时代,安卓手机是我们日常生活不可或缺的伙伴。然而,正因为我们的生活如此忙碌,记事变…...

河北吉力宝以步力宝健康鞋引发的全新生活生态商
在当今瞬息万变的商业世界中,成功企业通常都是那些不拘泥于传统、勇于创新的先锋之选。河北吉力宝正是这样一家企业,通过打造一双步力宝健康鞋,他们以功能性智能科技穿戴品为核心,成功创造了一种结合智能康养与时尚潮流的独特产品…...
反射获取Constructor、Field、Method对象
1、获取构造器 Constructor [ ] getConstructor s ( ) 获取全部的构造器:只能获取 public 修饰的构造器 package com.csdn.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.junit.Test; import jav…...
【Netty】 ByteBuf的常用API总结
目录 一、ByteBuf介绍 二、ByteBuf创建 1.池化创建 ByteBufAllocator 2.Unpooled (非池化)创建ByteBuf 3.ByteBufUtil 操作ByteBuf 三、读取ByteBuf数据 1.get方法 2.read方法 3.set方法 4.write方法 5.索引管理 6.索引查找 7.索引查找 8.其…...
热门敏捷开发管理工具
敏捷管理研发工具可以协助团队更好地进行敏捷开发和管理。以下是几种流行的敏捷管理研发工具: Leangoo:Leangoo领歌一款永久免费的专业敏捷研发管理工具,它覆盖了敏捷项目研发全流程,包括小型团队敏捷开发,规模化敏捷…...

Java分支结构:一次不经意的选择,改变了我的一生。
👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、顺序结构二、分支结构1、if语句2、switch语句 好久不见!命运之轮常常在不经意间转动,有时一个看似微…...

Unity中Shader需要了解的点与向量
文章目录 前言一、点和向量的区别二、向量加法减法1、向量加法2、向量减法(可以把向量减法转化为向量加法) 三、向量的模四、标量1、向量与标量的乘法 前言 Unity中Shader了解使用的…...
Java初始化大量数据到Neo4j中(一)
背景:我们项目第一次部署图数据库,要求我们把现有的业务数据以及关系上线第一时间初始化到Neo4j中。开发环境数据量已经百万级别。生成环境数据量更多。 我刚开始开发的时候,由于对Neo4j的了解并没有很多,第一想到的是用代码通用组…...

Excel·VBA日期时间转换提取正则表达式函数
标准日期转换 Function 标准日期(ByVal str$) As DateDim pat$, result$arr Array("(\d{4}).*?(\d{1,2}).*?(\d{1,2})", "(\d{4}).*?(\d{1}).*?(\d{1,2})")If Len(str) < 8 Then pat arr(1) Else pat arr(0)With CreateObject("vbscript.r…...

Django中的缓存
Django中的缓存 缓存的定义 定义: 缓存是-类可以更快的读取数据的介质统称,也指其它可以加快数据读取的存储方式。一般用来存储临时数据,常用介质的是读取速度很快的内存 意义:视图渲染有一定成本,数据库的频繁查询过高;所以对于低频变动的页…...
Python 编程基础 | 第二章-基础语法 | 2.4、while 语句
一、while 语句 1、循环语句 Python 编程中 while 语句用于循环执行程序,其基本形式为: while 判断条件(condition):执行语句(statements)……例如: count 0 while (count < 9):print(count)count 1while 语句时还有另外两个…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...