博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快捷导航栏tagView
阅读量:5167 次
发布时间:2019-06-13

本文共 4147 字,大约阅读时间需要 13 分钟。

推荐一个摸手的大神:

https://github.com/PanJiaChen/vue-element-admin

思路:

在点击跳转时,记录路由信息到state的一个数组里,

这个数组的数据被拿来渲染tagview,

同时对路由渲染处的router-view进行缓存(<keep-alive>)

剩下的就是对state路由数组的操作。

贴上关键代码

home.vue

  

export default {        components: {            HelloWorld,            leftNav,            topHeader,            tabNav,            tagViews,            crumbs        },        data(){            return {                isHome:true            }        },        created(){            this.routeIsHome();        },        methods:{            routeIsHome(){
//首页判断 let self = this; let isHome = true; if(this.$route.meta.pageName =='首页' && this.$route.meta.parentPageName ==''){ isHome = true }else{ isHome = false; } this.$nextTick(()=>{ self.isHome = isHome; }) } }, watch: { '$route' (to, from) { let self = this; let isHome = true; if(to.meta.pageName =='首页' && to.meta.parentPageName ==''){ isHome = true; }else{ isHome = false; } this.$nextTick(()=>{ self.isHome = isHome; }) } } }
View Code

 

left.vue

{
{tmp.text}}{
{tmp.url}}
      
        goPage(nameZh,nameE){                var obj = {                    nameZh:nameZh,                    nameE:nameE                }                this.$store.commit('addPageCache', obj);//记录路由                this.$router.push('/'+nameE)//页面跳转
}

 

sotre.js

export default new Vuex.Store({	state: {		pageCache:[],//缓存路由,制作tag—view		curPage:'',//当前页		crumbs:{firstPage:'首页',parentPage:'',curPage:''}//面包屑	},	mutations: {		addPageCache(state,obj){//添加缓存页面			let isTrue = state.pageCache.some((cur,index,arr)=>{				return cur['nameE'] &&  cur['nameE'] == obj['nameE'];//避免重复添加			})			if (isTrue) return;			state.pageCache.push({				nameE:obj.nameE,				nameZh:obj.nameZh,				paratNameZh:obj.paratNameZh			})		},		removePageCache(state,obj){//清除页面缓存			var pageCache = state.pageCache.filter((cur,index,arr)=>{				if(cur['nameE'] &&  cur['nameE'] != obj['nameE']){					return cur;				}			})			if(pageCache.length != state.pageCache.length){//删除成功				state.pageCache = pageCache;				if(pageCache.length > 0){//存在多的tagview情况下					obj.router.go(-1);				}			}					},		setCurPage(state,name){//设置当前页			console.log(name)			state.curPage = name;		},		clearPageCache(state){//清空tagview			state.pageCache = [];		}	}})

  

tag_view.vue

router.js

//路由拦截器
router.beforeEach((to, from, next) => {	//根据字段判断是否路由过滤	if(to.meta.requireAuth) { // 判断该路由是否需要登录权限		if(localStorage.getItem('sid')) { //身份信息获取			if(to.meta.pageName =='首页'){				router.app.$options.store.commit('clearPageCache');//清空tagview			}else if(to.name != ''){//显示当前tagview				router.app.$options.store.commit('setCurPage',to.name);			}						next();		} else {			next({				path: '/login'			})		}	} else {		next();	}});

  

下面是废话(坑自己系列),可以跳过:

  开始想的是用elementUI的tabs做这个东西。tabs有自定义删除标签页的功能,点击可以切换。那把页面都渲染在tabs里进行切换,想干掉点小叉叉就好了,简直完美。

  于是渲染左侧导航栏后,点击时把需要的信息传给state记录,tabs通过拿state数据来渲染。

  有个字段content:‘’即tab内容数据。改怎么把页面渲染进去呢?

  于是我给内容里放router-view ,然后加上name做成命名视图。通过名字去匹配路由

  在路由里一通配置,渲染时得到一条闪亮的字符串router-view。该如何让它重新渲染呢?

  网上搜来搜去有一个解决视图不渲染的办法,加一个动态key,那就加吧。

  F5 F5 F5 CTRL+F5 F5 F5 F5 CTRL+F5  唉!!。

  有人这么干成功过的私我QQ953708317

  

  

 

 

 

转载于:https://www.cnblogs.com/92xcd/p/9939635.html

你可能感兴趣的文章
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
吴恩达机器学习笔记 —— 3 线性回归回顾
查看>>
Problem E: Automatic Editing
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
sizeof与strlen的用法
查看>>
Linux 下常见目录及其功能
查看>>
开源框架中常用的php函数
查看>>
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>