Vue3.x+element-plus+ts踩坑笔记( 二 )

leftMenu.vue

Vue3.x+element-plus+ts踩坑笔记

文章插图
Vue3.x+element-plus+ts踩坑笔记

文章插图
<template><el-sub-menu v-if="menuInfo.childs.length > 0" :index="menuInfo.id"><template #title><el-icon :size="18"><component :is="menuInfo.icon" /></el-icon><span>{{ menuInfo.m_name }}</span></template><template v-for="item in menuInfo.childs" :key="item.id"><sub-menu :menu-info="item" /></template></el-sub-menu><el-menu-item v-else :index="menuInfo.id"@click="menuFun(menuInfo, menuInfo.id)" ><el-icon :size="18"><component :is="menuInfo.icon" class="menu-icon" /></el-icon><span>{{ menuInfo.m_name }}</span></el-menu-item></template><script lang="ts" name="SubMenu" setup>import {Document,Menu as IconMenu,Location,Setting,Menu,Grid,} from "@element-plus/icons-vue";import { defineProps } from "vue";import { useRouter } from "vue-router";import { useStore } from "vuex";//路由const router = useRouter();//vuexconst store = useStore();const props = defineProps({menuInfo: {type: Object,default: () => {return {id: "",parent_id: "",m_name: "",icon: "",childs: [],};},},});const menuFun = (event: any, index: string) => {setNav(event);store.dispatch("setMenuActive", { menuActive: index });if (event.url && event.url.length > 0) {router.push({path: event.url,query: {},});}};const setNav = (item: any) => {store.dispatch("setNav", { nav: item });};</script>subMenu.vue
解决方案一:修改 main.ts
import { createApp } from 'vue'import App from './App.vue'import router from './router'import store from './store'import ElementPlus from 'element-plus'import 'element-plus/es/components/button/style/css'import * as Icons from '@element-plus/icons-vue'const app = createApp(App)Object.keys(Icons).forEach(key => {app.component(key, Icons[key as keyof typeof Icons])})app.use(store)app.use(router)app.use(ElementPlus)app.mount('#app')解决方案二:将 main.ts 改回原来的
import { createApp } from 'vue'import App from './App.vue'import router from './router'import store from './store'createApp(App).use(store).use(router).mount('#app')//公共cssimport './assets/css/index.scss'将subMenu.vue组件的 js 代码改为
import { defineComponent } from "vue";import {Document,Menu as IconMenu,Location,Setting,Menu,Grid,} from "@element-plus/icons-vue";import { useRouter } from "vue-router";import { useStore } from "vuex";export default defineComponent({components: {Document,Menu,Location,Setting,Grid,},props: {menuInfo: {type: Object,default: () => {return {id: "",parent_id: "",m_name: "",icon: "",childs: [],};},},},setup() {//路由const router = useRouter();//vuexconst store = useStore();const menuFun = (event: any, index: string) => {setNav(event);store.dispatch("setMenuActive", { menuActive: index });if (event.url && event.url.length > 0) {router.push({path: event.url,query: {},});}};const setNav = (item: any) => {store.dispatch("setNav", { nav: item });};return {menuFun,};},});</script>参考哪里忘记了 , 第一种是面向百度的 , 第二种是小颖自己试出来的
来来来找到了 , 参考这里;vue3 动态加载el-icon图标
3.vuex页面刷新数据丢失问题的四种解决方式解决方案:第一步:执行以下代码
npm install --save vuex-persist第二步:在 store 下的 index.ts 中引入并使用
import VuexPersistence from "vuex-persist";//解决页面刷新vuex数据丢失const vuexLocal = new VuexPersistence({storage: window.localStorage})export default createStore({state: {},getters: {},mutations: {},actions: {},modules: modules,plugins: [vuexLocal.plugin]})更多方法参考:vuex页面刷新数据丢失问题的四种解决方式

经验总结扩展阅读