当前位置: 首页 > news >正文

把手搭建vue前后端管理系统-TAB标签通过pinia来进行管理(二十六)

目标:通过pinia的store来进行组件状态的统一管理,这样大家都可以共用到这个组件的状态信息,就可以实现组件的联动

一、添加侧边栏菜单的点击事件:

1、CommonAside.vue里面添加click的事件

<el-menu-item
    v-for="item in noChildren"
    :index ="item.path"
    :key="item.path"
    @click="handelMenu(item)"
>        
<el-menu-item-group  >
  <el-menu-item
  v-for="(subItem,subIndex) in item.children"
  :index ="subItem.path"
  :key="subItem.path"
  @click="handleMenu(subItem)"
  >

2、写入handleMenu的方法:

const router=useRouter() const route=useRoute() const handleMenu=(item)=>{     router.push(item.path) }

二、stores下面的index.js里面增加tags的状态:

function initState(){
  return {
        isCollapse:false,
        tags:[
            {
              path:'/home',
              name:'home',
              label:'首页',
              icon:'home'
            }
            ],
  }
}

三、CommonTab.vue里面进行tags的动态获取,tags的值就是从store的state里面进行获取,而不是静态的在这个里面写一个ref的数组了:

import {useAllDataStore} from "../stores/index.js";
const store=useAllDataStore()

const tags=computed(()=>store.state.tags)

四、在stores里面新增selectMenu的动作并暴漏出去

export const useAllDataStore = defineStore('allData', (a) => {
    //在 Setup Store 中:
    //ref() 就是 state 属性
    //computed() 就是 getters
    //function() 就是 actions
    const state = ref(initState())

    //需要把所有定义的state,getters,actions返回出去
    // 如果传进来的item的数组的值=home就不做操作,如果不等于home就查找state中tags数组的下标
    //findIndex(item=>item.name=val.neme)就相当于findIndex(item){item.name=val.name),,就是赋值了
    // 参数:回调函数,而回调函数中的参数代表数组中的元素参数
    // 返回值 : 返回值是元素在数组中的位置,差找不到则显示-1,没有找到,就将val的值插入到tags的数组里面,这样标签就可以增加了
    function selectMenu(val) {
        if (val.name === "home") {
            state.value.currentMenu = null;
        } else {
            let index = state.value.tags.findIndex(item => item.name === val.name)
            index === -1 ? state.value.tags.push(val) : "";
        }
    }

    return {
        state,
        selectMenu,
    };
})

五、在CommonAside.vue里面的handleMenu里进行使用

const handleMenu=(item)=>{     
  router.push(item.path);     
  store.selectMenu(item) 
}

六、最终的效果:

相关文章:

  • [特殊字符] 校园外卖跑腿平台源码技术解析与实战搭建指南
  • 鸡生蛋还是蛋生鸡? 基于python的CCM因果关系计算
  • ROS2的发展历史、核心架构和应用场景
  • 【机器学习】使用Python Spark MLlib进行预测模型训练
  • ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常
  • GPU架构与通信互联技术介绍
  • 如何使用Tailwind CSS创建一个组合了很多样式的类名,实现样式复用
  • 【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler
  • [ComfyUI] SDXL Prompt Styler 自定义节点的作用解析
  • 【前端扫盲】node.js npm nvm都是什么以及他们之间的关系
  • A Brief History: from GPT-1 to GPT-3
  • 自然语言处理(12:RNN(正式介绍))
  • 合宙780E开发学习-LUATOS-SOC云编译自定义固件
  • 业务相关
  • 程序控制结构
  • 理解文字识别:一文读懂OCR商业化产品的算法逻辑
  • 使用AI一步一步实现若依(26)
  • 汽车方向盘开关功能测试的技术解析
  • Redis中的数据类型与适用场景
  • 《基于机器学习发电数据电量预测》开题报告
  • 王受文已任中华全国工商业联合会领导班子成员
  • 智能终端出海服务创新联合体成立
  • 辽宁省委书记、省长连夜赶赴辽阳市白塔区火灾事故现场,指导善后处置工作
  • 五月院线片单:就看五一档表现了
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来
  • 贸促会答澎湃:5月22日将举办2025年贸易投资促进峰会