当前位置: 首页 > 知识库问答 >
问题:

vue.js - vue标签页,如何只切换当前点击的标签?

黎同
2024-08-21

image.png
初始只有一个标签,点击+号,会新增一个标签,跳转到首页,再点击左侧菜单,只切换当前点击的标签,第一个标签还是点击+号之前的最后一个路由

[MUTATION_CORE_UPDATE_VIEW]: (state, view) => {
    console.log(state.visitedViews.some(v => v.path === view.path), state.visitedViews,state.cachedViews)
    if (state.visitedViews.some(v => v.path === view.path)) return
 
    for (let v of state.visitedViews) {
      // console.log(state.visitedViews, v,v.fullPath , view.path);
      if (v.path !== view.path) {
        v = Object.assign(v, view)
        break
      } 
    }

  },

现在的结果是,点击+号会新增一个标签,点击新增的标签,再点击左侧菜单切换页面,他自己又跳转到第一个标签页了

共有2个答案

燕博文
2024-08-21
[MUTATION_CORE_UPDATE_VIEW]: (state, view) => {
    if (state.visitedViews.some(v => v.path === view.path)) return
    let index = state.visitedViews[state.visitedViews.length - 1]
    index = Object.assign(index, view)
  },
狄灵均
2024-08-21

在你的问题描述和代码示例中,你遇到的问题是在尝试更新 Vue 路由标签页状态时,错误地修改了 state.visitedViews 数组中的对象,而不是添加新的视图或更新当前活动的视图。你的代码尝试在 state.visitedViews 中找到与 view.path 不匹配的视图并更新它,这是不正确的逻辑,因为你应该只更新当前活动的视图或添加新视图到数组中。

首先,确保你的 state.visitedViews 数组是用来存储用户访问过的视图(页面)的列表,每个视图都应该是一个唯一的对象,通常包含 path 和其他可能的属性(如 titlefullPath 等)。

为了修复你的问题,你应该在 MUTATION_CORE_UPDATE_VIEW 突变(mutation)中做以下事情:

  1. 检查视图是否已存在:如果视图已存在于 visitedViews 中,则不需要做任何操作(或者你可以更新它的 meta 信息,如标题等,但这取决于你的具体需求)。
  2. 如果视图不存在:你应该将这个新的视图对象添加到 visitedViews 数组中,并且可能需要更新其他状态(如 activeView,假设你有一个状态来跟踪当前活动的视图)。

这里是一个简化的示例,展示如何实现这一点:

[MUTATION_CORE_UPDATE_VIEW]: (state, view) => {
    // 检查视图是否已存在
    if (!state.visitedViews.some(v => v.path === view.path)) {
        // 如果不存在,则添加到 visitedViews
        state.visitedViews.push(view);

        // 如果需要,更新 activeView 或其他相关状态
        // 例如,如果你希望新添加的视图成为当前活动的视图
        // state.activeView = view; // 假设你有一个 activeView 状态
    }
    // 注意:如果视图已存在,则不需要进行任何更新
    // 因为通常我们不希望覆盖用户之前访问过的视图的完整状态
},

注意:你的原始代码尝试在找到不匹配的视图时更新它,这通常不是期望的行为,因为它会破坏 visitedViews 数组中已存在的其他视图的状态。你应该只添加新视图或更新特定于当前操作的状态(如 activeView)。

另外,请确保你的路由守卫或页面跳转逻辑不会意外地重置或改变当前活动的视图状态。如果你的应用使用了 Vue Router,确保你正确地使用了 router-viewrouter-link,以及可能的路由守卫(如 beforeEachbeforeLeave)来管理视图的显示和隐藏。

 类似资料:
  • 本文向大家介绍js实现点击切换TAB标签实例,包括了js实现点击切换TAB标签实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js实现点击切换TAB标签。分享给大家供大家参考。具体如下: 这里演示的选项卡效果代码,无jq,纯JS来实现,灰色风格,没有怎么美化,或许看上去比较普通,不过兼容性和操作起来挺舒服的,风格适用于大部分的网站,或许你会用得上。 先来看看运行效果截图: 在线演示地址

  • 本文向大家介绍Vue实现导航栏点击当前标签变色功能,包括了Vue实现导航栏点击当前标签变色功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue实现导航栏点击当前标签变色功能的具体代码,供大家参考,具体内容如下 1.效果 2.所有代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我已经开发了这段代码,用于将所有搜索结果打开到新标签中: 我想要的是当我打开所有带有搜索结果的选项卡时,我想在所有选项卡之间切换并延迟2秒。 我该如何实施? 问题答案: 试试这个代码,

  • 本文向大家介绍JS实现标签页切换效果,包括了JS实现标签页切换效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JS标签页切换的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我有两个s类型的。对于每个都有一个相应的,里面有一个。 我希望单击按钮会产生与单击标签相同的效果:检查相应的输入。 然而,这并没有发生。如下面的代码段所示,悬停并按下按钮确实会触发单选按钮中相应的样式更改,但单击操作不会选择输入,即使简单标签按预期工作。 我已经检查了s是s的合法子代。标签允许短语化内容,按钮是短语化内容,所以那里应该一切正常。 我还尝试将事件侦听器添加到两个按钮的单击事件中,并在

  • 我尝试用html、css、JavaScript制作切换标签。 这是我的代码,我试过了。 null null 但我想用仅有的HTML和CSS来制作这个函数。所以我就这样试着。但它不起作用。 null null 请帮帮我.提前谢谢你。