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

vue页面目录菜单有些属性是根据缓存读取的。如果缓存更新了。希望这个菜单也跟着更新。

父组件中有两个子组件。如果在B组件数据更新之后。A组件也跟着一起改变呢?如图如果我右边基本信息里面勾选了高血压,左侧菜单里面也要立刻出现一个高血压随访菜单,如果我取消勾选了左侧菜单就去掉。

左侧菜单的显示和隐藏的数据实际上是放在缓存里面的。所以当右侧数据改变,缓存的数据要更新。然后左侧菜单也要跟着立刻读取最新的数据。

遇到的问题和解决办法:1,怎么在B组件操作A组件呢?解决:使用provide和inject可以在父组件和祖孙组件之间通信,然后使用this.$refs.子组件的函数名。

2,缓存内容改变了但左侧菜单数据没办法及时更新。解决:不能在data里面定义获取缓存。必须重新再调用一次。

说的可能比较抽象。下面看代码

父组件

<template><div class="layout-main"><!-- 左边 --><layout-left ref="compA"></layout-left><!-- 右边 --><layout-right> </layout-right></div>
</template><script>
import layoutLeft from "./two-left.vue";
import layoutRight from "./two-right.vue";export default {provide() {return {reloadComponentA: this.reload,};},components: {layoutLeft,layoutRight,},methods: {reload() {this.$refs.compA.loadData();},},
};
</script>

layout-left组件

created() {this.getData(local.get("healthMessage").healthRecordId);
},
methods: {
//在父组件调用的是这个方法用于更新页面loadData() {this.getData(local.get("healthMessage").healthRecordId);},
//把菜单的数组对象写在methods里面getItems() { 
this.items = [{icon: "iconfont icon-changjingguanli",index: "5",title: "慢病管理",isHide:local.get("healthMessage").diabetesSign == 1 ||local.get("healthMessage").hypertensionSign == 1 ||local.get("healthMessage").copdSign == 1,subs: [{index: "/high-followup",title: "高血压随访",isHide: local.get("healthMessage")? local.get("healthMessage").hypertensionSign == 1 || "": "",},{index: "/diabetes-followup",title: "糖尿病随访",isHide: local.get("healthMessage")? local.get("healthMessage").diabetesSign == 1 || "": "",},{index: "/lung-followup",title: "慢阻肺随访",isHide: local.get("healthMessage")? local.get("healthMessage").copdSign == 1 || "": "",},],
}]}
getData(id) {

  ...这里是获取接口数据

//重新加载目录。及时更新菜单
this.getItems();
this.$set(this, "items", this.items);

}

two-right

export default {inject: ["reloadComponentA"],

    methods:{

//需要更新菜单数据时调用它执行父组件里面的reloadComponentA函数。
   local.set("healthMessage", res.data);this.reloadComponentA();

}

我使用的local.set和local.get是自己封装的。就是重新的读取缓存的。如果需要我也列下来

export default {//取数据get(key) {return JSON.parse(window.localStorage.getItem(key));},//存数据set(key, val) {window.localStorage.setItem(key, JSON.stringify(val));},//删除本地存储中数据remove(key) {window.localStorage.removeItem(key);},//清空本地存储的所有数据clear() {window.localStorage.clear();},
};

 

http://www.xdnf.cn/news/8200.html

相关文章:

  • 编程速递-RAD Studio 12.3 Athens五月补丁:May Patch Available
  • 制作一款打飞机游戏54:子弹编辑UI
  • 视频文件损坏怎么修复?4款专业视频修复工具推荐
  • JUC入门(六)
  • webpack性能优化
  • 【Pandas】pandas DataFrame round
  • 深入解读Qwen3技术报告(三):深入剖析Qwen3模型架构
  • 【网络篇】TCP协议的三次握手和四次挥手
  • 动手学深度学习12.5. 多GPU训练-笔记练习(PyTorch)
  • cider指标
  • 光谱相机在地质勘测中的应用
  • leetcode2261. 含最多 K 个可整除元素的子数组-medium
  • JAVA动态生成类
  • 在政务中使用仙盟创梦工具维护曲靖市麒麟公安分局————仙盟创梦IDE
  • WordPress AI插件 新增支持一键批量自动生成WooCommerce 产品描述、产品图、产品评论
  • 开源无界 智联欧陆——仓颉计划携手OpenHarmony共绘万物互联新图景
  • Excel 密码忘记了?巧用PassFab for Excel 解密帮您找回数据!
  • AI 多 Agent 图形化开发深度解析:iVX IDE 与主流产品技术架构对比研究
  • Python项目文件组织与PyCharm实践:打造高效开发环境
  • [AI] 提升Dify工作流性能的技巧:合理安排LLM节点的位置
  • FFmpeg 超级详细安装与配置教程(Windows 系统)
  • NIFI的处理器:RouteOnContent 1.28.1
  • Matlab学习合集
  • Kubernetes上的爬虫排队术——任务调度与弹性扩缩容实战
  • Spring 面试要点深度解析
  • ABP VNext + Elasticsearch 实战:微服务中的深度搜索与数据分析
  • 系统研发进阶:如何构建系统化的技术管理知识体系
  • 在 “Linux 9“ 系统快速安装配置RabbitMQ
  • MySQL索引事务
  • 第七部分:第一节 - 数据库基础与 MySQL 入门:仓库的结构与管理语言