[iview/iview-admin]iview版本更新导致sidebarMenu使用异常

2024-01-05 867 views
2

起因:更新了最新版iview安装包。 iview 2.12.0 关于Menu组件的变动 修复 Menu 在 accordion 模式下,事件 on-open-change 返回错误值的 bug。#3298 这个改动导致main-components/shrinkable-menu/components/sidebarMenu,vue文件在使用menu组件时on-open-change返回值与之前版本不一致,进而导致左侧导航栏使用异常。

异常场景:点击左侧子菜单,该父菜单下所有子菜单收起。当收起其他父菜单下子菜单,点击没被收起的子菜单,之前被收起的全部又被放开了。

我多次测试过后,认为这个使用异常与sidebarMenu,vue文件中的updated函数有关,因为注释掉updated代码就不会再出现异常场景,但影响其他使用(刷新页面后,不会自动对当前打开的子菜单那一栏父菜单打开)。

暂时解决方案:

  1. 使用2.12.0之前版本的iview。2.将updated使用created去代替,但不清楚其他副作用。

updated代码: updated () { this.$nextTick(() => { if (this.$refs.sideMenu) { this.$refs.sideMenu.updateOpened(); } }); }

不清楚是否是on-open-change返回值影响了this.$refs.sideMenu.updateOpened()。

回答

5

更新一下:on-open-change返回值是不符合预期的,当收起时,返回的数组对应值未被清空。点击父组件,对应值未被push进数组,当点击子菜单,才会被push进数组。

9

我也遇到一样的问题,点击子菜单,会导致父菜单收起,但目前还没找到具体原因。

5

遇到同样的问题,后来重新下载,又没出现了。。。

2

确实,我也遇到了,点击子菜单,父菜单会自动闭合

1

我也遇到了啊,用的好好地就不对了。。。我没更新版本啊

6

我的也是一样 点击了子菜单父菜单就自动收回了

9

也发现了有这个问题,sidebarMenu.vue 组件里面的updated事件都不执行

7

今天找了一下原因,发现这是iview的bug,可能是iview作者在修复手风琴这个issue时疏忽了。 iview源码中,menu.vue在updateOpenKeys方法中关于openedNames的处理是有问题的,导致非手风琴模式出错。我等等会去iview提一下issue..帮助作者完善。由于不属于iview-admin的bug,此问题在iview解决后,我会自行关闭。