【2024】vue-router和pinia的配置使用

news2024/11/25 16:28:59

目录

  • vue-router
  • pinia
  • vue-router+pinia进阶用法---动态路由

有同学在项目初始化后没有下载vue-router和pinia,下面开始:

vue-router

npm install vue-router

然后在src目录下创建文件夹router,以及下面的index.ts文件:
在这里插入图片描述
写进下面的初始化代码:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes:[
    {
      path:"/",
      name:"main",
      component:()=>import("../views/home/IndexView.vue")
    }
  ],
})
export default router

最后在main.ts文件中写:

import router from './router'
app.use(router)

pinia

先安装:

npm install pinia

然后在main.ts文件中使用:

import { createPinia } from 'pinia'

const pinia = createPinia()

app.use(pinia)

最后在src目录下创建文件夹store,然后新建你的文件,这里是index.ts:

import { defineStore } from 'pinia'

export const store = defineStore('counter', {
    state: () => ({ count: 0, name: 'Eduardo' }),
    getters: {
        doubleCount: (state) => state.count * 2,
    },
    actions: {
        increment() {
            this.count++
        },
    },
})

在使用的时候引入就可以了!

vue-router+pinia进阶用法—动态路由

有点复杂,但是正规,修行看个人,看懂多少凭本事吧,其实上面哪些也够用了!
在store/modules/routes/index.ts写入:

import { defineStore } from 'pinia';

interface Meta {
    id: string;
    auth?: boolean;
    keepAlive?: boolean;
    isActive?: boolean;
    isLnkActive?: boolean;
    isLink?: boolean;
}

interface RouteData {
    name: string;
    path?: string;
    component?: string;
    meta: Meta;
    children?: Array<RouteData>;
}

export const useRoutesStore = defineStore({
    id: 'routes',
    state: (): { routesData: Array<RouteData> } => ({
        routesData: [],
    }),
    getters: {
        routesData: (state) => state.routesData,
    },
    actions: {
        setRoutes(payload: { routesData: Array<RouteData> }) {
            this.routesData = payload.routesData;
        },
    },
});

在router/index.ts文件中:

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import { useRoutesStore } from '@/store/modules/routes';

const router = createRouter({
    history: createWebHistory(process.env.BASE_URL),//在vue.config.js中的publicPath中配置根目录
    //记录滚动的位置解决白屏问题,必须配合keep-alive
    scrollBehavior(to, from, savedPosition) {
        if (savedPosition) {
            // 如果有保存的位置,则返回保存的位置
            return savedPosition;
        } else {
            // 否则返回一个新的位置对象
            return { left: 0, top: 0 };
        }
    },
    routes: [
        {
            path: "/",
            name: "main",
            component: () => import("../views/home/IndexView.vue")
        }
    ],
})

//将store内部的routes模块下的routesData数据源拼接成一维数组
const oneRoutes: any = [];
function setOneRoutes(data: RouteRecordRaw[]) {
    if (data.length > 0) {
        for (const route of data) {
            if (route.component) {
                const tmpComponent = route.component;
                route.component = () => import(`../views/${tmpComponent}`);
                oneRoutes.push(route);
            }

            if (route.children && route.children.length > 0) {
                setOneRoutes(route.children);
            }
        }
    }
}


//使用setTimeout模拟setTimeout
setTimeout(() => {
    //服务端接口请求的数据源
    const routesData = [
        {
            name: "栏目管理",//路由名称
            path: "column",//路由中的path
            component: "admin/column/IndexView.vue",//路由映射的组件
            meta: {
                id: "1",
                auth: true,//会员登录验证标识
                keepAlive: false,//是否开启keep-alive。true:开启,false:关闭
                isActive: false,//点击后的颜色
                isLnkActive: false//点击链接后的颜色
            }
        },
        {
            name: "会员管理",
            meta: {
                id: "2",
                auth: true,
                keepAlive: false,
                isActive: false,
                isLnkActive: false,
            },
            children: [
                {
                    name: "查看会员",
                    path: "user",
                    component: "admin/column/IndexView.vue",
                    meta: {
                        id: "2-1",
                        auth: false,
                        keepAlive: true,
                        isActive: false,
                        isLnkActive: false
                    }
                },
                {
                    name: "编辑会员",
                    // path:"add_user",
                    // component:"admin/user/add",
                    meta: {
                        id: "2-2",
                        auth: true,
                        keepAlive: false,
                        isActive: false,
                        isLnkActive: false
                    },
                    children: [
                        {
                            name: "添加",
                            path: "add_user",
                            component: "admin/user/AddView.vue",
                            meta: {
                                id: "2-2-1",
                                auth: true,
                                keepAlive: false,
                                isActive: false,
                                isLnkActive: false
                            }
                        }
                    ]
                }
            ]
        },
        {
            name: "订单管理",
            meta: {
                id: "3",
                auth: true,
                keepAlive: false,
                isActive: false,
                isLnkActive: false
            },
            children: [
                {
                    name: "查看订单",
                    path: "order",
                    component: "admin/order/IndexView.vue",
                    meta: {
                        id: "3-1",
                        auth: true,
                        keepAlive: false,
                        isActive: false,
                        isLnkActive: false
                    }
                },
            ]
        },
        {
            name: "百度",
            path: "http://www.baidu.com",
            meta: {
                id: "4",
                isActive: false,
                isLnkActive: false,
                isLink: true,//是否外链
            }
        }
    ]

    useRoutesStore().setRoutes({ routesData: routesData });
    const oneRoutes = useRoutesStore().routesData as RouteRecordRaw[];
    router.addRoute({
        path: "/admin",
        name: "admin",
        component: () => import("../views/admin/index/IndexView.vue"),
        redirect: "/admin/column",
        meta: { auth: true },
        children: oneRoutes // 将组装好的子路由配置数据赋值给children属性
    });
}, 300)

router.beforeEach((to, from, next) => {
    if (to.meta.auth) {
        if (localStorage['isLogin']) {
            next();
        } else {
            next("/");
        }
    } else {
        next();
    }
});
export default router

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1493286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题-反转链表

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 下面是代码的解题过程&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct ListNode SLis…

【PowerMockito:编写单元测试过程中原方法没有注入的属性在跑单元测试时出现空指针】

出错场景 下面这一步报空指针&#xff0c;但是因为没有注入&#xff0c;在测试类中无法使用Mock 解决 在执行方法前&#xff0c;加入以下代码 MemberModifier.field(ResourceServiceImpl.class,"zero").set(resourceService,"0");

基于springboot的中小企业设备管理系统设计与实现论文

中小企业设备管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了中小企业设备管理系统的开发全过程。通过分析中小企业设备管理系统管理的不足&#xff0c;创建了一个计算机管理中小企业设备管理系统的方…

车载光控膜(汽车光线控制膜)行业迎来发展机遇 我国市场国产化进程加快

车载光控膜&#xff08;汽车光线控制膜&#xff09;行业迎来发展机遇 我国市场国产化进程加快 车载光控膜又称汽车光线控制膜&#xff0c;指通过控制光线出光方向&#xff0c;防止大尺寸车载显示屏反光倒影成像到挡风玻璃的功能性薄膜。车载光控膜具有提高视觉舒适度、保证车辆…

使用 Docker 部署 File Browser 文件管理系统

1&#xff09;File Browser 介绍 官网&#xff1a;https://filebrowser.org/ GitHub&#xff1a;https://github.com/filebrowser/filebrowser 今天为大家分享一款开源的私有云盘项目&#xff1a;File Browser&#xff0c;简单实用、轻量级、跨平台&#xff0c;安装部署简单快…

Maya笔记 软选择

文章目录 1什么是软选择2注意3如何打开软选择3.1方法一3.2方法二 4调整软选择的范围5衰减模式5.1体积模式5.2表面模式 6衰减曲线 1什么是软选择 也就是渐变选择&#xff0c;从中心点向外影响力度越来越小 软选择针对的是点线面这些模型元素 下图中展示了对被软选择的区域移动…

二、MySQL基础语法重点!(增删查改)

目录 一、SQL的增删改&#xff08;DML&#xff09; 1、添加数据 2、修改数据 3、删除数据 二、SQL查询&#xff08;DQL&#xff09; &#xff08;一&#xff09;基本查询 &#xff08;二&#xff09;条件查询 &#xff08;三&#xff09;聚合函数 &#xff08;四&#…

牛客网 华为机试 进制转换

本题是要将十六进制的字符串转换成十进制。看到题目第一眼就想到用map进行十六进制和十进制的映射。 然后我们需要注意&#xff0c;字符串前面会有0X&#xff0c;这只是一个标识十六进制的标识符&#xff0c;没有具体数字意义&#xff0c;我们在转换的时候&#xff0c;需要把它…

视频怎么压缩?不影响视频画质的三个方法

在数字化时代&#xff0c;高清晰度和4K视频的广泛应用使得我们在制作、分享和传输视频时拥有了更多的可能性。然而&#xff0c;随之而来的问题就是庞大的视频文件大小&#xff0c;不仅占用存储空间&#xff0c;而且在上传、分享和传输过程中可能遇到一系列的困扰。 为了解决这…

牛客网 华为机试 质因子

本题是要求一个数的所有质因子&#xff0c;包括重复的&#xff0c;比如180。首先质数就是素数&#xff0c;其只能被1和其本身整除&#xff08;1不是质数&#xff09;。比如2的因子只有1和2&#xff0c;3的因子只有1和3&#xff0c;5的因子只有1和5。 比如题中的180&#xff0c;…

小兴教你做平衡小车-stm32程序开发(PWM)

1 程序分享 main.c文件。 #include "stm32f10x.h" #include "led.h" #include "delay.h" #include "usart.h" #include "key.h" #include "tim.h" #include "pwm.h" #include "stdio.h"int…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸表情识别 该项目较…

【S32K3驱动配置】-1.1-GPIO配置及其应用-点亮LED灯(基于SDK)

目录&#xff08;共10页精讲&#xff0c;手把手教你S32K3从入门到精通&#xff09; 实现的软件架构&#xff1a;基于Drivers层&#xff08;以往的SDK&#xff09; 前期准备工作&#xff1a; 1 创建一个FREERTOS工程 2 点亮评估板S32K312EVB-Q172中D13 LED灯 2.1 S32K312EV…

C++ 之LeetCode刷题记录(三十八)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target…

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度 一、安装Thonny环境安装测试 在Thonny设定CircuitPython环境硬件部分Thonny部分 利用Pico内置温度传感器输出CPU温度 一、安装Thonny 下载链接&#xff1a; https://github.com/thonny/thonny/releas…

STM32各外设初始化步骤

1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…

记事本怎么导入Excel文件 记事本数据导入Excel方法

在日常生活中&#xff0c;记事本软件已经成为了我不可或缺的助手&#xff0c;帮助我记录着点点滴滴&#xff0c;释放了大脑的负担。然而&#xff0c;随着时间的推移&#xff0c;记事本里的内容越来越多&#xff0c;如何高效地整理这些数据成为了一个新的问题。特别是当我需要将…

2024Java高频精选面试题讲解,mysql语句优化面试

前言 一位小伙伴准备了许久的阿里Java面试&#xff0c;原以为能够顺利拿下offer&#xff0c;但在第三面还是被摁在地上反复摩擦&#xff0c;丧气一段时间后&#xff0c;小伙伴调整了心态重新尝试了一下&#xff0c;最终拿下了offer&#xff0c;今天小编把这位小伙伴遇到的面试…

操作系统(笔记)(一)

1、操作系统的功能和目标 1.1功能 存储管理文件管理设备管理处理机管理进程管理 1.2目标 方便性&#xff1a;操作系统作为用户与计算机硬件系统之间的接口&#xff0c;提供了直观的命令和界面&#xff0c;使得用户能够更容易地操作计算机。有效性&#xff1a;操作系统旨在提…

Java基于微信小程序的高校讲座预约系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…