vue实现前进刷新后退不刷新效果
Vue实现前进刷新,后退不刷新效果的独特路径
在移动端的Vue项目开中,我们经常会遇到一个需求:加载过的界面需要缓存(返回时无需重新加载),而关闭的界面应当被销毁(再次进入时重新加载)。例如,从a到b再到c时刷新b和c,但从c到b再到a时则不刷新b和a。今天,我将与大家分享如何实现这一功能。
幸运的是,我们可以通过路由的meta属性来实现我们的需求。我们可以为每个路由设置一个meta属性中的keepAlive标志,来决定这个路由是否需要被缓存。当路由前进时,我们可以检查from和to路由的keepAlive状态,并在后退时将from路由的keepAlive设置为false,将to路由的keepAlive设置为true。这样,我们就可以在前进时重新加载之前被设置为false的路由了。
假设我们有三个界面:login、server和main。我们可以为这三个界面的路由设置层级关系,并默认将keepAlive设置为true。例如:
我们首先创建一个router实例,其中包含三个路由的层级关系设置:
```javascript
const router = new VueRouter({
routes: [
{ path: '/', redirect: '/login' },
{ path: '/login', component: Login, meta: { keepAlive: true } },
{ path: '/login/server', component: ServerList, meta: { keepAlive: true } },
{ path: '/login/server/main', component: Main, meta: { keepAlive: true } }
]
})
```
然后,我们可以使用router的beforeEach钩子来判断何时后退。在后退时,我们将from路由的keepAlive设置为false,将to路由的keepAlive设置为true:
```javascript
router.beforeEach((to, from, next) => {
const toDepth = to.path.split('/').length;
const fromDepth = from.path.split('/').length;
if (toDepth < fromDepth) { // 判断是否后退
console.log('后退...');
from.meta.keepAlive = false; // 设置from路由不缓存
to.meta.keepAlive = true; // 设置to路由缓存
}
next(); // 继续导航
})
```我们可以使用Vue的keep-alive组件来实现界面的缓存。我们将需要缓存的视图组件放在keep-alive组件内,从而实现前进刷新、后退不刷新的效果。具体的实现方式如下:
```html
编程语言
- vue实现前进刷新后退不刷新效果
- vue+vuex+axios+echarts画一个动态更新的中国地图的方
- 微信小程序嵌入腾讯视频源过程详解
- phpmailer发送邮件功能
- vue实现手机号码抽奖上下滚动动画示例
- jquery实现页面关键词高亮显示的方法
- 在Vant的基础上封装下拉日期控件的代码示例
- JS批量替换内容中关键词为超链接
- 浅析JavaScript中的变量复制、参数传递和作用域链
- Bootstarp基本模版学习教程
- JS实现输入框提示文字点击时消失效果
- js利用clipboardData实现截屏粘贴功能
- WordPress中制作导航菜单的PHP核心方法讲解
- jQuery与getJson结合的用法实例
- JavaScript如何动态创建table表格
- ashx文件的使用小结