前提:
两个vue组件显示状态为tab页面,点击组件a中的超链接跳转到组件b,需要在b中修改数据写到数据库,点击保存或者关闭后b组件tab页关闭,跳回a组件tab页,a重新发起initPage初始化请求,从库中取最新数据,回写到页面上,出现只有第一次进入b页面修改后保存返回a页面,会刷新数据,后续再次从a进入b修改,保存后返回a就不会刷新(即只有第一次有效)
思路:
由于是公司封装的框架,一开始没想到是缓存原因,于是采用了路由跳转的方案
方案1.路由跳转
通过window.location.hash.slice(1)获取当前a页面路由地址,和a页面初始化所需参数一起作为参数传递到b页面,b组件保存后关闭当前页面,通过this.$router.push({路径,params})跳转回a页面,并将a页面初始化参数带回a页面,a页面出发mouted中的初始化方法,刷新页面数据
后发现只有第一次能够刷新数据,a页面data中初始换参数在过程中其实一直存在this中,可能是组件使用了keep-alive缓存,于是采用actived钩子函数方案
方案2.钩子函数actived
具体关于activated钩子函数可去以下链接了解
vue中activated_vue actived钩子_ANNENBERG的博客-CSDN博客
注意:activated钩子函数只能在组件被keep-alive标签包裹时生效
所以就变简单啦,在a组件初始化方法initPage中判断data中有无初始化参数(首次进入a是从它的上一个页面进入的,带过来的参数),有的话直接调用,没有再从上个页面的路由参数中取,然后在activated钩子函数中调用initPage方法就可以刷新噜,瞬间变简单,也不用考虑路由路径