zoukankan      html  css  js  c++  java
  • 在使用element-ui的导航组件时遇到的bug,elmenu.items的key值不对的问题

    在使用element-ui的导航组件时遇到的bug,elmenu.items的key值不对的问题

    如果我们在页面布局的时候使用的是这样的布局,主菜单向子菜单传递的时候,element页面渲染没有问题,当加上process这种tab标签,并且点击这个tab标签相应的子菜单要激活,这个bug就来了。

    原因是elment组件在设置items的时候莫名其妙的更新错了,保留了之前的key值,items里面的这个key值是用组件上绑定的index值设定的,激活态activeIndex也和这个key有关。

    这时候只能自己手动改过来。

    1.先给这个el-menu一个ref

    <div class="whr-side-menu">
    				<el-menu
    					ref="aside_menu"
    					class="el-menu-vertical-demo"
    					:default-active="$route.path"
    				>
    					<menutree :menu="somenu"></menutree>
    				</el-menu>
    			</div>
    

    2.点击主菜单的时候,把子菜单(children)传递给侧边栏子菜单。

    1.somenu就是这个传递的值,讲道理的话,应该到此就完事了。谁也想不到会产生那个莫名其妙的bug。

    2.把正确的key值手动付给items,就是下面的代码,用这个$set()我注释的那一段也可以,不过没必要,因为activeIndex依然不会变(之后会讲到)。

    toSideMenu(children) {
    			let that = this;
    			this.somenu = children;
    			let keymap = new Map();
    			setTimeout(function () {
    				for (let iterator in that.$refs.aside_menu.items) {
    					keymap.set(
    						iterator,
    						that.$refs.aside_menu.items[iterator].index
    					);
    					// that.$set(
    					// 	that.$refs.aside_menu.items,
    					// 	keymap.get(iterator),
    					// 	that.$refs.aside_menu.items[iterator]
    					// );
    					that.$refs.aside_menu.items[keymap.get(iterator)] =
    						that.$refs.aside_menu.items[iterator];
    					delete that.$refs.aside_menu.items[iterator];
    				}
    			}, 200);
    		},
    

    3.手动给activeIndex赋值,改变侧边栏导航的激活态

    PubSub.subscribe("setAciveIndex", (msg, item) => {
    			that.$set(that.$refs.aside_menu, "activeIndex", item);
    		});
    

    item就是对应的路由

    好了,这样就解决了。这个bug我解决了好久,开始以为自己传值有问题,可是这么简单点事能出什么问题呢?

    不过后面我要讲的,手动渲染递归导航菜单可以避开的这个问题。

    后面讲vue element-ui 导航菜单的递归渲染。

  • 相关阅读:
    图解排序算法(三)之堆排序
    博客园添加看板娘
    php设计模式
    PHP二维数组排序 array_multisort
    php-jwt-token
    c++实现冒泡排序
    常见的排序 转
    Mac VMware Fusion CentOS7配置静态IP
    vmwar快照和克隆区别
    springboot maven打包插件
  • 原文地址:https://www.cnblogs.com/chopin-1990/p/13608231.html
Copyright © 2011-2022 走看看