使用的框架:vue3,vue-element-plus-admin
在src\permission.ts文件里怎么改变 导航菜单ElMenu 上的属性值,比如说,改变菜单选中的is-active?
使用的框架:vue3,vue-element-plus-admin
在src\permission.ts文件里怎么改变 导航菜单ElMenu 上的属性值,比如说,改变菜单选中的is-active?
要在 `src\permission.ts` 文件中改变 Vue 3 和 vue-element-plus-admin 框架中导航菜单 `ElMenu` 上的属性值(例如,改变菜单选中的 `is-active`),你可以通过 Vue 的响应式状态管理和路由守卫来实现。以下是一个基本步骤和示例代码:
1. **定义响应式状态**:在 `src\store`(或你管理 Vuex/Pinia 状态的目录中)定义一个状态来管理当前激活的菜单项。
2. **修改 `permission.ts` 文件**:在 `permission.ts` 文件中,利用 Vue Router 的导航守卫来更新这个状态。
3. **绑定状态到 `ElMenu`**:在组件中绑定这个状态到 `ElMenu` 的 `default-active` 属性,这个属性决定了哪个菜单项是激活的。
### 示例代码
#### 1. 定义响应式状态(使用 Pinia 作为示例)
在 `src\store\index.ts` 中:
import { defineStore } from 'pinia';
export const useMenuStore = defineStore('menu', {
state: () => ({
activeMenu: '' // 初始化为空字符串或默认激活的菜单项路径
}),
actions: {
setActiveMenu(path: string) {
this.activeMenu = path;
}
}
});
#### 2. 修改 `permission.ts` 文件
在 `src\permission.ts` 中:
import { createRouter, createWebHistory } from 'vue-router';
import { useMenuStore } from '@/store'; // 根据你的项目结构调整路径
import routes from './routes'; // 导入你的路由配置
const router = createRouter({
history: createWebHistory(),
routes,
});
router.beforeEach((to, from, next) => {
const menuStore = useMenuStore();
menuStore.setActiveMenu(to.path); // 更新当前激活的菜单项
next();
});
export default router;
#### 3. 绑定状态到 `ElMenu`
在你的导航组件中(例如 `Navbar.vue`):
<template>
<el-menu
:default-active="activeMenu"
class="el-menu-vertical-demo"
@select="handleSelect"
<el-menu-item index="index1">
<router-link to="/path1">Menu 1</router-link>
</el-menu-item>
<el-menu-item index="index2">
<router-link to="/path2">Menu 2</router-link>
</el-menu-item>
<!-- 更多菜单项 -->
</el-menu>
</template>
<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useMenuStore } from '@/store'; // 根据你的项目结构调整路径
export default defineComponent({
setup() {
const menuStore = useMenuStore();
const activeMenu = computed(() => menuStore.activeMenu);
const handleSelect = (key: string, keyPath: string[]) => {
console.log(key, keyPath);
};
return {
activeMenu,
handleSelect,
};
},
});
</script>
这样,当路由变化时,`permission.ts` 中的导航守卫会更新 `menuStore` 中的 `activeMenu` 状态,而导航组件则会根据这个状态来设置 `ElMenu` 的 `is-active` 样式。
可以这样子实现:
引入必要的模块:
import { ref } from 'vue';
import { useRouter, useRoute } from 'vue-router';
定义一个响应式变量:
const router = useRouter();
const route = useRoute();
const activeMenu = ref(route.path);
在路由守卫中更新激活状态:
router.beforeEach((to, from, next) => {
activeMenu.value = to.path;
next();
});
在组件中使用这个响应式变量:
<template>
<el-menu :default-active="activeMenu">
<!-- 你的菜单项 -->
</el-menu>
</template>
<script setup>
import { computed } from 'vue';
import { activeMenu } from '@/permission';
const activeMenu = computed(() => activeMenu.value);
</script>
这样,当路由变化时,activeMenu
会自动更新为当前的路径,ElMenu 的 is-active
属性保持与当前路由匹配。
3 回答6.2k 阅读✓ 已解决
2 回答10.7k 阅读✓ 已解决
2 回答6.4k 阅读✓ 已解决
2 回答7.7k 阅读✓ 已解决
4 回答4.3k 阅读
3 回答2.4k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
把业务操作方式改为其他的方式了。