vue解决menu菜单刷新是不选中的问题思路

<template>
    <div>
        <!-- <button v-for="menu in menus" :class="[isActive === menu.value ? 'bg-color' :'']" :key="menu.name" @click="activeMenu(menu)"> -->
        <button v-for="menu in menus" :class="isActive === menu.value ? 'bg-color' :''" :key="menu.name" @click="activeMenu  = menu.name">
      {{ menu.name }}
    </button>
    </div>
</template>

<script setup>
import { ref, onMounted,watch } from 'vue';
const menus = [
   { name: 'home', label: 'Home',value:1 },
   { name: 'about', label: 'About',value:2 },
   // ...其他菜单项
 ];
const isActive = ref(false)

 const activeMenu = ref(localStorage.getItem('activeMenu') || 'home');
console.log('0',activeMenu.value);
 
// 监听activeMenu的变化来更新localStorage
watch(activeMenu, (newValue) => {
  localStorage.setItem('activeMenu', newValue);
});
 
onMounted(() => {
  // 页面加载完成后,从localStorage中恢复activeMenu的值
  activeMenu.value = localStorage.getItem('activeMenu') || 'home';
});
</script>

<style lang="scss" scoped>
.bg-color{
   color: aqua;
}
</style>

### 解决 Vue 3 Setup 中 El-menu 刷新后保持选中状态 为了使 `El-menu` 组件在页面刷新之后仍然能够记住并显示最后点击的菜单项,在 Vue 3 的组合式 API (`setup`) 下可以采用如下方法: #### 使用 Vuex 或者 localStorage 来保存当前激活的菜单索引 通过监听路由变化来更新存储中的活动菜单键路径,并利用此数据初始化组件的状态。 ```javascript // store.js or similar state management file import { defineStore } from "pinia"; export const useMenuStore = defineStore({ id: 'menu', state: () => ({ activeIndex: '' }), actions: { setActiveIndex(index) { this.activeIndex = index; localStorage.setItem('activeMenuItem', index); } }, }); ``` 当应用启动时读取本地存储的数据设置默认值: ```typescript // main.ts import { createApp } from 'vue'; import App from './App.vue'; const app = createApp(App); if (localStorage.getItem('activeMenuItem')) { // Initialize the menu with previously selected item. } app.mount('#app'); ``` 在 `El-menu` 组件内部处理逻辑如下所示: ```html <template> <el-menu :default-active="currentActive"> <!-- Your menu items here --> </el-menu> </template> <script lang="ts" setup> import { ref, onMounted } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { useMenuStore } from '@/stores/menu'; const route = useRoute(); const router = useRouter(); let currentActive = ref<string>(''); onMounted(() => { let storedIndex = localStorage.getItem('activeMenuItem') || ''; currentActive.value = storedIndex; function handleSelect(key:string){ currentActive.value=key; const menuStore=useMenuStore(); menuStore.setActiveIndex(currentActive.value); switch(key){ case '/path1': router.push({ path:'/path1'}); break; default: console.log(`No matching route for ${key}`); } } }); </script> ``` 上述代码展示了如何使用 Pinia 进行全局状态管理以及如何结合 `localStorage` 实现持久化功能[^1]。每当用户选择一个新的菜单选项时,都会触发相应的事件处理器函数 `handleSelect()` 更新当前激活的菜单项并将更改后的索引存入浏览器缓存中以便下次加载页面时恢复之前的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值