浅谈针对Vue相同路由不同参数的刷新问题
浅谈Vue相同路由不同参数的刷新问题:长沙网络推广的经验分享
在使用Vue和Vue Router开发SPA(单页应用)时,我们常常会遇到一种情况:当页面跳转时,组件本身并没有发生改变,而数据却保留在了前一个路由组件中。这对于我们来说,可能并不是想要的效果。特别是在需要对同一路由的不同参数进行刷新时,问题尤为突出。针对这个问题,长沙网络推广给大家分享几种解决方案。
一、路由映射关系问题
假设我们有一个路由映射关系 '/form/:type',当前页面路由为 '/form/shop1',当我们执行 `this.$router.push({ name: 'form', params: { type: 'shop2' }})` 进行路由跳转时,可能会发现组件并没有刷新。这时,我们可以尝试以下方式解决:
1. 使用全局导航守卫进行拦截。当发现跳转到的路由名称和参数与前一个路由相先跳转到一个中间路由(如 'empty'),然后再从该中间路由跳转至目标路由。这样可以确保每次跳转都会重新加载组件。示例代码如下:
```javascript
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();
}
});
```
随后在中间过渡路由中重新跳转到目标路由。
二、使用v-if重新渲染当前页面组件
可以通过在HTML中使用`
```html
```
```javascript
// script部分
export default {
data () {
return {
isRouterAlive: true, // 控制组件的显示与隐藏
}
},
methods: {
reload () { // 重新加载组件的方法
this.showRouterView = false; // 先隐藏组件
this.$nextTick(() => (this.showRouterView = true)) // 在下一个DOM更新循环结束后重新渲染组件
}
}
}
```
当需要刷新组件时,调用`reload`方法即可。这种方式适用于需要刷新整个页面的场景。但对于局部刷新,可能需要更复杂的方法。接下来介绍一种更简单的方法。三、使用vue文档组件绑定的key值进行强制刷新Vue文档说明了在某些情况下,可以利用更新组件绑定的key值来触发强制刷新。示例代码如下:为组件绑定与路由参数关联的值即可:
编程语言
- 浅谈针对Vue相同路由不同参数的刷新问题
- PHP date()格式MySQL中插入datetime方法
- PHP观察者模式示例【Laravel框架中有用到】
- 在smarty中调用php内置函数的方法
- PHP使用PDO抽象层获取查询结果的方法示例
- 如何用js判断dom是否有存在某class的值
- Javascript变量的作用域和作用域链详解
- 详解JavaScript中的forEach()方法的使用
- ADO.NET获取数据(DataSet)同时获取表的架构实例
- 关于preg_replace函数的问题讲解
- PHP date函数常用时间处理方法
- vue-resource-jsonp请求百度搜索的接口示例
- AngularJS中如何使用echart插件示例详解
- jQuery插件easyUI实现通过JS显示Dialog的方法
- mysql 5.7.16 winx64安装配置方法图文教程
- XAMPP安装与使用方法详细解析