bhuh12 / vue-router-tab

Vue.js tab components, based on Vue Router.

Home Page:https://bhuh12.github.io/vue-router-tab/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

更新到最新版本后关闭按钮无效,提示Cannot read property 'key' of undefined

hellolex opened this issue · comments

commented

Bug 描述

更新到最新版本后出现bug
1、点击标签页的关闭按钮无效,控制台提示
[Vue Router Tab] TypeError: Cannot read property 'key' of undefined

2、原来配置的全局alive-id="fullPath"属性无效,无法重复打开全路径不同的页面,控制台还是提示
[Vue Router Tab] TypeError: Cannot read property 'key' of undefined

截图

如果可以,请添加屏幕截图以帮助解释您的问题。

代码重现

关键代码

<router-tab 
            alive-id="fullPath" 
            ref="router-tab" 
            default-page="/home"
            :tab-transition="null"
            :page-transition="null"
            :keep-last-tab="false"
            :dragsort="false">
            <div slot="end" class="flex-ac" style="height:100%;">
                <span><i class="fa fa-times"></i></span>
            </div>
</router-tab>

开发环境(请填写以下信息)

Node.js:12.18.3
"vue": "2.6.11",
"vue-router": "3.2.0",
"vue-router-tab": "1.2.6"

运行环境(请填写以下信息)

  • 操作系统: [Windows 7

image
最终测试下来,是1.2.6版本才有这个问题。1.2.5及以下没有这个问题。当前我是在package.json里直接指定了1.2.5版本来安装以解决此问题。

commented

降版本到1.2.2后也是一样的情况。并且是打包部署后才会有这个问题,npm run dev运行起来是正常的。

我这边是开发环境和部署都有这个问题

image
最终测试下来,是1.2.6版本才有这个问题。1.2.5及以下没有这个问题。当前我是在package.json里直接指定了1.2.5版本来安装以解决此问题。

但是在nuxt项目下好像无解。。。

都是 Nuxt 下的吗?

都是 Nuxt 下的吗?

我有2个项目引用了vue-router-tab,一个是普通的vue项目,vue-router-tab版本回退到1.2.5就正常了,另一个是nuxt项目,逐级回退到1.2.2都还没有解决。

commented

我降了版本到1.2.5 和 1.2.4都还有这个问题,我的是普通的vue项目

我降了版本到1.2.5 和 1.2.4都还有这个问题,我的是普通的vue项目

image
版本号前面不加^或~

commented

我降了版本到1.2.5 和 1.2.4都还有这个问题,我的是普通的vue项目

版本号前面不加^或~
是的,1.2.4也还是不行,我之前的系统用这个版本是可以的
图片

可以展开下错误消息吗?

可以展开下错误消息吗?

image
如有需要,可以zoom或qq远程让你调试下。

展开到对应的代码格式化看看

展开到对应的代码格式化看看

有点多,我截的图可能不一定是你想要的结果。看是否要远程看看,qq已发送至你的邮箱。

commented

我截了点图,点击最后一个错误,定位到的代码是
image
QQ图片20210603180241

大概定位到原因了,应该是你们升级了 Vue 的版本,新版本 Vue 的 KeepAlive 实现有些变化,原有移除缓存的判断方式不再适用,需要更改兼容这里的逻辑

Vue 官方的 KeepAlive 精简了缓存的数据,导致移除缓存失败
vuejs/vue@e7baaa1

大概定位到原因了,应该是你们升级了 Vue 的版本,新版本 Vue 的 KeepAlive 实现有些变化,原有移除缓存的判断方式不再适用,需要更改兼容这里的逻辑

Vue 官方的 KeepAlive 精简了缓存的数据,导致移除缓存失败
vuejs/vue@e7baaa1

那可能是的,我这nuxt项目的vue版本是2.6.13。

升级 1.2.7 版本试试,问题应该已经修复了


原来配置的全局alive-id="fullPath"属性无效

1.0.0 版本时,组件就已经弃用配置项 alive-id 更改全局的规则,并且默认同一个路由是保持一个页签的。

目的是尽量避免用户同时打开太多的页签,导致应用内存占用太大。

参考提交记录:
feat(RouterAlive): RouterAlive 组件使用 keep-alive + router-view 重构

升级 1.2.7 版本试试,问题应该已经修复了

原来配置的全局alive-id="fullPath"属性无效

1.0.0 版本时,组件就已经弃用配置项 alive-id 更改全局的规则,并且默认同一个路由是保持一个页签的。

目的是尽量避免用户同时打开太多的页签,导致应用内存占用太大。

参考提交记录:
feat(RouterAlive): RouterAlive 组件使用 keep-alive + router-view 重构

测试过了,已修复,辛苦了,谢谢👏👏👏

commented

升级 1.2.7 版本试试,问题应该已经修复了

原来配置的全局alive-id="fullPath"属性无效

1.0.0 版本时,组件就已经弃用配置项 alive-id 更改全局的规则,并且默认同一个路由是保持一个页签的。

目的是尽量避免用户同时打开太多的页签,导致应用内存占用太大。

参考提交记录:
feat(RouterAlive): RouterAlive 组件使用 keep-alive + router-view 重构

我看文档知道现在是需要在单个路由上自行添加key=fullPath,但是我司系统要求的确奇葩,就是每一次点击都是要新开一个标签,系统中路由有上百个,每个都自行写这个麻烦,目前只好写个遍历加上,可以考虑一下暴露个全局参数可以进行修改
而且不知道为啥之前到1.2.4版本时这个全局alive-id="fullPath"属性还是生效的

可以新建一个 feature issue,我后续看有没时间补充这个功能吧