在使用vue和vue-router开发spa应用时,我们会遇到这样一种问题。
当页面跳转时,组件本身并没有发生改变:
// 路由映射关系'/form/:type' // 当前页面路由/form/shop1 this.$router.push({ name: 'form', params: { type: 'shop2' })
这时我们进行路由跳转后会发现组件并没有刷新,在前一个路由组件的数据都保留了下来,这并不是我们想要的效果。
对于简单的数据更新,我们可以直接监听路由参数并重新获取路由的初始化数据即可,
但是对于有很多子组件需要初始化或者reset的情况,我们还是有必要重新执行组件的生命周期。
针对这种情况可以使用三种方式解决:
1.为相同路由页面的跳转进行中间路由替换,在router上注册beforeEach全局守卫进行拦截,跳转到一个中间路由(例如empty),再从中间过渡路由跳转至要去的路由。
// 全局导航守卫 router.beforeEach((to, from, next) => { if (to.name === from.name && to.params.type !== from.params.type) { next({ name: 'empty', query: { toPath: to.fullPath } }) } else { next() } }) // 中间过渡路由 let toPath = this.$route.query.toPath if (this.toPath) { this.$router.push({ path: this.toPath }) }
2.使用v-if重新渲染当前页面组件
// html部分 <div> <router-view v-if="showRouterView"/> </div> // script部分 export default { data () { return { isRouterAlive: true } }, methods: { reload () { this.showRouterView = false this.$nextTick(() => (this.showRouterView = true)) } } }
这样把方法注册到跟组件上,对于想刷新的组件直接调用reload方法即可。
3.使用vue文档组件绑定的key值来进行强制刷新
vue文档说明了当你需要
的时候可以利用更新组件绑定的key值来完成更详细的说明
这样直接为组件绑定与路由参数关联的值即可
<MyComponent :key="routeParams" />
综合来看,第三种方式最简单,推荐使用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍浅谈C/C++中指针和数组的不同,包括了浅谈C/C++中指针和数组的不同的使用技巧和注意事项,需要的朋友参考一下 这边先简单介绍一下内存分区。 内存按照用途划分为五个区: 1.栈区:由系统控制分配和回收。 例如定义变量 int x = 0; int *p = NULL; 变量所占的内存都是分配在栈区的。 2.堆区:由程序员管理。 在C语言中由 malloc 申请的内存,或者在C++中
当路由是user/222/detail时 为什么匹配的params里orderId是222/detail,怎么样只匹配中间那段? user/222后可以有子路径也可以没有
router配置 点击进去页面时 这样点击后页面会出现但是刷新或者跳转别的路由会报错 刷新报错: 跳转其他路由报错: 如何解决?
路由功能浅谈 在本章 选择恰当的分片数量和分片副本数量 一节中,已经提到使用路由功能可以只在一个分片上执行查询命令,作为提高系统吞吐量的一种解决方案。接下来作者将详细地介绍这一功能。 分片和分片中数据 通常情况下,ElasticSearch是如何把数据分发到各个分片中,哪个分片存储哪一类的文档等细节并不重要。因为查询时,将查询命令分发到每个分片就OK了。唯一的关键点在于算法,将数据均等地分配到各个
假设 页面 /detail/1 上面有一个列表,上面有一个列表,分别需要跳转到 /detail/2, /detail/3 这种相同的页面,只是参数不同,需要跟进id调用接口刷新页面,请问该如何跳转,最好 url 地址也跟着改变
本文向大家介绍浅谈vue项目,访问路径#号的问题,包括了浅谈vue项目,访问路径#号的问题的使用技巧和注意事项,需要的朋友参考一下 刚入手vue,有好多的疑问,目前遇到的是vue项目启动之后,输入http://ip:port,我发现浏览器里面显示的地址栏竟然是http://ip:port/#/,这个”/#/“不知道是什么东西,于是百度查了一下。 原因:对于vue开发的单页面应用,我们在切换不同的页