原因:页面没有跳转过去,但网址已经跳转过去了,这个原因是因为他没有进行缓存,所以页面没有进行及时的渲染。
方案一
//先在router/index.js中添加路由元信息,设置需要缓存的页面 routes: [{ path: '/', name: 'index', component: index, meta: { keepAlive: false, //此组件不需要被缓存 } },{ path: '/page1', name: 'page1', component: page1, meta: { keepAlive: true, //此组件需要被缓存 } },{ path: '/page2', name: 'page2', component: page2, meta: { keepAlive: true, // 此组件需要被缓存 } },{ path: '/page3', name: 'page3', component: page3, meta: { keepAlive: false, // 此组件不需要被缓存 } } ]
然后在vue中改写<router-view> 加一个路由参数判断
<keep-alive> <router-view v-if="$route.meta.keepAlive"> <!-- 这里是会被缓存的视图组件,比如 page1,page2 --> </router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"> <!-- 这里是不被缓存的视图组件,比如 page3 --> </router-view>
方案二
可以在点击跳转页面之前,获取当前的路由,记录下来,然后指定跳转
1、store里怎么写和怎么取就不赘述了,beforenter...等方法看自己使用需求了,下面用的beforeEach
beforeEach router.beforeEach((to,from,next) => { if(to.meta.gorouter){ //判断该路由是否需要权限 Store.commit("setFromRouter", from) //路由跳转前记录上一级路由 next() }else{ next({ path:'/login', query:{redirect:to.fullPath} //将该路由path传入login页面,登陆成功后跳转到该页面 }) } }else{ Store.commit("setFromRouter", from) //路由跳转前记录上一级路由 next() } })
在vue中需要返回的方法里这样调用就行
this.$router.push(this.FromRouter).then(r => {})this.FromRouter来源与所在组件的computed计算属性
computed: { FromRouter: function(){ return this.$store.getters.getFromRouter } },