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

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();},
};

 

相关文章:

  • 第二十二次博客打卡
  • 前端vscode学习
  • 关于如何在Springboot项目中通过excel批量导入数据
  • CentOS安装最新Elasticsearch8支持向量数据库
  • openEuler 22.03 LTS-SP3 系统安装 docker 26.1.3、docker-compose
  • 大队项目流程
  • 关于WPS修改默认打开设置
  • scikit-learn pytorch transformers 区别与联系
  • 推荐一个Excel与实体映射导入导出的C#开源库
  • C++(28):容器类 <map>
  • 前端学习笔记element-Plus
  • GaussDB(PostgreSQL)查询执行计划参数解析技术文档
  • 嵌入式学习的第二十六天-系统编程-文件IO+目录
  • AJAX get请求如何提交数据呢?
  • 阿里巴巴 MCP 分布式落地实践:快速转换 HSF 到 MCP server
  • Ajax01-基础
  • 数据仓库工具箱第三版——读书笔记(未完)
  • jvm安全点(五)openjdk17 c++源码垃圾回收之安全点阻塞状态线程在安全点同步中无需调用block函数的详细流程解析
  • Origin绘制多因子柱状点线图
  • 鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter
  • 西安推荐企业网站制作平台/自己创建一个网站需要多少钱
  • 台州黄岩做网站/郑州seo外包平台
  • 门户网站源码/广告免费发布信息
  • 网站设计管理方向/用模板快速建站
  • 传新闻到网站上怎么做/谷歌seo什么意思
  • 有没有专门做衣服搭配的网站/资源搜索引擎