网上有很多关于vue的前向刷新和后向刷新的方法,基本都是用keep-alive,但是试了很多方法都不尽如人意。后来有人建议基于keepaliveinclude,试了一下发现了一些思路,暂时实验一下是可行的,分享出来大家一起讨论学习。它可能不是最好的解决方案,但确实有效。这里需要用到vuex。如果你不使用vuex,你可以使用LocalStorage代替。1.修改主路由页面,添加keep-alive标签include2.同时添加automaticcomputedincludescomputedtothispage:{includs(){returnthis.$store.state.includeds}}3.修改vuex的store,添加included对象,添加commit方法。如果这里不用vuex,也可以自己设置LocalStorage。state:{includes:''},mutations:{setIncludeds(state,setdata){state.includeds=setdata}}4.添加一个beforeEach路由守卫到main.js页面。并设置后页数组。如果不使用全局守卫,也可以在页面单独设置写beforeRouteLeave,方法一样。router.beforeEach((to,from,next)=>{letaddPage=['addProduct','newEdit','showNews'];if(!mCd.inArray(to.name,addPage)){//这里的mCd.inArray方法是判断数组是否包含,需要自己实现。store.commit('setIncludeds','');}next();})5.设置页面的名称和activatedexport(news.vue)default{name:'news',data(){return{....}},activated(){this.$store.commit('setIncludeds','新闻');//这里设置一个同名的名字}}*注意:这里激活的commit中设置的第二个参数,必须和名字name一致。6.然后就可以了。原理分析:1.通过设置keepalive的include,当然也可以设置exclude,自行百度。include是要缓存的页面名称2。它设置为在页面激活时缓存当前页面。3、页面跳转时,判断路由的to.name是否在set数组中。4、跳转到编辑或展示页面,返回后返回缓存页面,不刷新。从其他页面进入时刷新。5、如果不设置路由全局守卫,也可以为每个页面单独写beforeRouteLeave。不知道这样写对不对。反正现在可以达到想要的效果了。另外,路由嵌套不是很深。如果谁有更好的方法,请提供。^_^