vue 手机端tab切换页面不刷新(vue Tab切换以及缓存页面处理的几种方式)
vue 手机端tab切换页面不刷新
vue Tab切换以及缓存页面处理的几种方式目录
- 1.如何切换
- 2.动态生成tab
- 3.缓存组件
- 3.1 keep-alive
- 3.2 使用
- 3.3 缓存组件的生命周期函数
使用动态组件,相信大家都能看懂(部分代码省略)
//通过点击就可以实现两个组件来回切换 <button @click="changeView">切换view</button> <component :is="currentView"></component> import pageA from "@/views/pageA"; import pageB from "@/views/pageB"; computed: { currentView(){ return this.viewList[this.index]; } }, methods: { changeView() { this.index=(++this.index)%2 } }
注:这个多用于单页下的几个子模块使用,一般切换比较多使用下面的路由
使用路由(这个就是配置路由的问题了,不作赘述)
2.动态生成tab一般UI框架给我们的tab切换都像是上面的那种,需要自己写入几个tab页之类的配置。但是我们如果想要通过点击左边的目录来生成一个tab页并且可以随时关闭呢(如下图)?
只需要给路由一个点击事件,把你的路由地址保存到一个列表,渲染成另一个平铺的tab目录即可
假设你的布局是这样,左边的目录,上边的tab,有字的是页面
<menu> <menu-item v-for="(item,index) in menuList" :key="index" @click="addToTabList(item.path)"> <router-link :to="item.path">{{item.name}}</router-link> <menu-item> </menu>
<template> <menu class="left"/>//menu代码部分如上 <li class="right"> <tab-list> <tab-item v-for="(item,index) in tabList" :key="index"> <router-link :to="item.path">{{item.name}}</router-link> <icon class="delete" @click="deleteTab"></icon> </tab-item> </tab-list> <page-view> <router-view></router-view>//这里是页面展示 </page-view> </li> </template>
以上代码并非实际代码,只提供一个大概的思路。至于addToTabList和deleteTab怎么做就是数组方法的简单push和splice操作了。为了效果好看,我们可能还需要一些tab的active样式,这里不作演示。
3.缓存组件仅仅是做tab切换,远远是不够的,毕竟大家想要tab页就是要来回切换操作,我们需要保存他在不同tab里操作的进度,比如说填写的表单信息,或者已经查询好的数据列表等。
那么我们要怎么缓存组件呢?
只需要用到vue中的keep-alive组件
3.1 keep-alive
- <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
- <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
- <keep-alive> 与 <transition>相似,只是一个抽象组件,它不会在DOM树中渲染(真实或者虚拟都不会),也不在父组件链中存在,比如:你永远在 this.$parent 中找不到 keep-alive 。
注:不能使用keep-alive来缓存固定组件,会无效
//无效 <keep-alive> <my-component></my-component> </keep-alive>
3.2 使用
3.2.1 老版本vue 2.1之前的使用
<keep-alive> <router-view v-if="$route.meta.keepAlive"></router-view> </keep-alive> <router-view v-if="!$route.meta.keepAlive"></router-view>
需要在路由信息里面设置router的元信息meta
export default new Router({ routes: [ { path: '/a', name: 'A', component: A, meta: { keepAlive: false // 不需要缓存 } }, { path: '/b', name: 'B', component: B, meta: { keepAlive: true // 需要被缓存 } } ] })
3.2.2 比较新而且简单的用法
直接缓存所有组件/路由
<keep-alive> <router-view/> </keep-alive> <keep-alive> <component :is="view"></component> </keep-alive>
使用include来处理需要缓存的组件/路由
include有几种用法,可以是数组,字符串用标点隔开,也可以是正则,使用正则的时候需要使用v-bind来绑定。
<keep-alive include="['a','b']">//缓存name为a,b的组件 <keep-alive include ="a,b">//缓存name为a,b的组件 <keep-alive :include="/^store/">//缓存name以store开头的组件 <router-view/>//可以为router-view <component :is="view"></component>//也可以是动态组件 </keep-alive>
使用exclude来排除不需要缓存的路由
跟include正好相反,在exclude里的组件不会被缓存。用法类似,不作赘述
3.2.3 一种比较奇怪的情况
当页面跳转方式有A->C和B->C两种,但是我们从A到C的时候,不需要缓存,从B到C的时候需要缓存。这时候就要用到路由的钩子结合老版本用法来实现了。
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { to.meta.keepAlive = false; // 让下一页不缓存 next(); } };
export default { data() { return {}; }, methods: {}, beforeRouteLeave(to, from, next) { // 设置下一个路由的 meta to.meta.keepAlive = true; //下一页缓存 next(); } };
3.3 缓存组件的生命周期函数
缓存组件第一次打开的时候,和普通组件一样,也需要执行created, mounted等函数。
但是在被再次激活和被停用时,这几个普通组件的生命周期函数都不会执行,会执行两个比较独特的生命周期函数。
- activated
这个会在缓存的组件重新激活时调用
- deactivated
这个会在缓存的组件停用时调用
以上就是vue Tab切换以及缓存页面处理的几种方式的详细内容,更多关于vue Tab切换以及缓存页面处理的资料请关注开心学习网其它相关文章!
- vue-cli请求数据的方式(vue-cli配置使用Vuex的全过程记录)
- vue时间转换(vue如何动态实时的显示时间浅析)
- vue过滤器filters怎么用(如何使用vue过滤器filter)
- vue移动端页面不能上下滑动(vue移动端实现左滑编辑与删除的全过程)
- vue3中的setup的参数(Vue3中ref与reactive的详解与扩展)
- vue实现添加一段代码功能(Vue实现动态查询规则生成组件)
- vue监控对象变化(Vue之监听方法案例详解)
- vue怎么更换自定义水印(Vue之全局水印的实现示例)
- vue验证码怎么用(vue验证码组件使用方法详解)
- vue验证码(vue_drf实现短信验证码)
- vuefor指令使用教程(Vue必学知识点之forEach的使用)
- vue-router起步教程交流(vue3使用vue-router的完整步骤记录)
- vue子视图里再加routerview(vue router-view的嵌套显示实现)
- vuex中action的值怎么接(vuex中Getter的用法详解)
- vue.js 怎么做插件(Vue.js实现音乐播放器)
- vue是怎样进行页面跳转(Vue实现登陆跳转)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
- 《红 雄安》系列广播剧第一集 水上奇兵雁翎队(雄安系列广播剧第一集)
- 小说 小伙穿越成刘备,用现代知识指挥作战,众谋士都看呆了(小伙穿越成刘备)
- 解析葡萄牙6-1瑞士 进攻多点开花,贡萨洛-拉莫斯一战成名(解析葡萄牙6-1瑞士)
- 这支 奇兵队 腕大 有范儿还各怀绝技,毒贩杀人犯见了都要仓皇而逃(这支奇兵队腕大)
- 雄藩崛起 奇兵队与幕末长州藩军事改革(雄藩崛起奇兵队与幕末长州藩军事改革)
热门推荐
- 宝塔面板网站搭建没锁定文件(宝塔面板曝出严重安全漏洞!站长需赶紧升级到最新版本)
- python转pdf教程(Python实现将HTML转成PDF的方法分析)
- vue动态生成的下拉框如何获取值(Vue 级联下拉框的设计与实现)
- dedecms标签怎么调用(dedeCMS 站内搜索代码的改进方法)
- jpg、png、gif图片格式的介绍
- python发送微信消息脚本(python实现微信定时每天和女友发送消息)
- mysql中null的用法(为什么mysql字段要使用NOT NULL)
- SQL group by分组查询
- sql查询union怎么用(SQL语句之Union和Union All的用法)
- css3动画实现loading(CSS3实现粒子旋转伸缩加载动画)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9