我正在努力找到最好的方法,让我的多层菜单在重新刷新时保持打开状态.

基本上,如果有人深入到我菜单中的第三层并单击"重新刷新",那么我希望菜单可以重新打开到他们在第三层中导航到的位置,而无需重新打开菜单.

请参阅下面的代码:(使用Vue bootstrap 和Vue.js)

如您所见,我正在重复从数据中获得的每一层.

        <div v-for="(main, index) in mainMenu" :key="index">
          <template v-if="main.title === 'News'">
            <b-link @click="closeAll" v-if="main.type === 'post_type' " :to="'/' + main.slug" v-b-toggle="'collapse'"  class="m-1 nobutn" v-html="main.title"></b-link>
          </template>
          <template v-else>
            <b-link v-if="main.type === 'post_type' " :to="'/' + main.slug" v-b-toggle="main.post_name" class="m-1 nobutn" v-html="main.title"></b-link>
            <b-link v-else :to="'/' + main.url" v-b-toggle="main.post_name" class="m-1 nobutn" v-html="main.title"></b-link>
          </template>
          <b-collapse v-model="main.show" v-for="(sub, index) in main.child_items" :key="index" v-bind:id="sub.menu_item_parent" accordion="my-accordion" role="tabpanel">
            <template v-if="sub.type === 'post_type'">
              <b-link class="secondLayer" :to="'/' + main.slug + '/' + sub.slug" :class="sub.classes">
                <b-card v-b-toggle="sub.post_name" class="subTitle" v-html="sub.title"></b-card>
              </b-link>
            </template>
            <template v-else>
              <b-link :href="sub.url" target="_blank" :class="sub.classes">
                <b-card v-b-toggle="sub.post_name" class="subTitle" v-html="sub.title"></b-card>
              </b-link>               
            </template>
            <b-collapse v-for="(subchild, index) in sub.child_items" :key="index" v-bind:id="subchild.menu_item_parent" accordion="my-accordiontwo" role="tabpanel">
              <template v-if="subchild.title === 'Members Portal' ">
                <b-link class="thirdLayer" :href="subchild.url" target="_blank" :class="subchild.classes">
                  <b-card v-b-toggle="subchild.post_name" class="subchildTitle" v-html="subchild.title"></b-card>
                </b-link>
              </template>
              <template v-else>
                <b-link class="thirdLayer" :to="'/' + main.slug + '/' + sub.slug + '/' + subchild.slug" :class="subchild.classes">
                  <b-card v-b-toggle="subchild.post_name" class="subchildTitle" v-html="subchild.title"></b-card>
                </b-link>
              </template>
              <b-collapse v-for="(fourthsubchild, index) in subchild.child_items" :key="index" :id="fourthsubchild.menu_item_parent">
                <b-link class="fouthLayer" :to="'/' + main.slug + '/' + sub.slug + '/' + subchild.slug + '/' + fourthsubchild.slug" :class="fourthsubchild.classes">
                  <b-card class="fourthchildTitle" v-html="fourthsubchild.title"></b-card>
                </b-link>
              </b-collapse>
            </b-collapse>
          </b-collapse>
        </div>

提前谢谢.

推荐答案

详细的回答很难,因为我不知道您的设置,也不熟悉vue bootstrap .

在"组件设置"功能中可能会出现如下情况:

onBeforeMount(() => {
  const thirdMenu = sessionStorage.getItem("thirdMenu");
  if (thirdMenu) {
    yourVariableWhatMenuIsOpen = thirdMenu; // open your third level menu as you want
  }
});

watch(
  () => yourVariableWhatMenuIsOpen,
  () => {
    yourVariableWhatMenuIsOpen
      ? sessionStorage.setItem("key", yourVariableWhatMenuIsOpen)
      : sessionStorage.removeItem("key");
  }
);

yourVariableWhatMenuIsOpen是您可能已经为菜单初始化的内容.

希望,这会有所帮助.也许你必须深入了解Vue,但我保证这一切都会很有趣

Vue.js相关问答推荐

Vuetify从同一方向旋转传送带下一个项目和上一个项目

已分配计算(computed)属性,但它没有设置器

如何使用 vue.js 和 vue 路由实现当前路由的子菜单的子菜单

在 Vuex 的状态下动态创建一个响应式数组

Vue:根元素内容和内容分发槽

在 Vue 中启用(控制台)记录路由事件

VueJS:在组件之间使用全局对象的最佳实践?

我是否必须在 Vue 3 中使用 Composition API,还是仍然可以使用Vue 2的方式工作?

Vue 单元测试:您正在开发模式下运行 Vue?

使用 aria-live 在 vue.js 中向屏幕阅读器宣布信息

如何在 vuejs 中异步加载图像 src url?

如何在不实例化根实例的情况下使用 vue 组件?

如何使表格行可点击并展开行 - vue.js - element-ui

vuetify:以编程方式显示对话框

我可以在 Vue 实例方法中传播的 mapMutations 中使用this吗?

如何在 Vue.js 中获取组件元素的 offsetHeight?

动态注册本地 Vue.js 组件

我可以使用react路由创建别名路由吗?

如何在 Vue.js 应用程序中正确下载 Excel 文件?

重新加载页面正在 vue 组件中的插槽上闪烁内容