
父组件中有两个子组件。如果在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();
},
};


















