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

目录

  • 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何选择阿里云服务器配置,过来人说说

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

京津冀国际光伏展

京津冀国际光伏展是中国在京津冀地区举办的一项光伏展览活动。光伏&#xff0c;即太阳能光伏发电技术&#xff0c;是利用太阳能将光能转化为电能的一种可再生能源技术。光伏展旨在促进光伏产业的发展与合作&#xff0c;推动光伏技术在京津冀地区的应用和推广。 在京津冀国际光伏…

对VisionPro的认识,CogPMAlingTool模板匹配工具练习

什么是VisionPro&#xff1f; 在认识VisionPro之前我们需要先熟悉一下图片的各种格式 这里我们可以参考来自githubcurry博主的文章 图片各种格式的区别以及计算机如何存储图片 VisionPro 是由世界领先的机器视觉公司 Cognex 开发的一款专业机器视觉软件。它提供了强大的图像…

Vue3使用ckeditor5,加载mathtype组件,并将最终结果转化为latex格式输出

vue3项目直接用vite搭建就行。我用的是4.1.0版本的vite 接下来说一下要注意的几个点&#xff1a; 1、ckeritor的相关依赖安装必须版本相同&#xff0c;不然会报依赖重复的错误 主要有以下依赖&#xff1a; "ckeditor/ckeditor5-basic-styles": "^38.0.1"…

基于springboot实现的幼儿园管理系统

一、系统架构 前端&#xff1a;html | layui | jquery | css 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 系统管理-用户管理 03. 系统管理-页面管理 04. 系统管理-角色管…

进制算法题(进制转换、Alice和Bob的爱恨情仇)

进制的本质 对于一个十进制数字&#xff0c;比如说153&#xff0c;其本质是每一个数位上的数字乘上这一位上的权重&#xff0c;即:153(1x)(5x)(3 x)而二进制&#xff0c;只不过是把10换成了2&#xff0c;任意一个非负整数都有唯一的一个二进制表示: 在计算机中&#xff0c;数字…

视频推拉流EasyDSS平台直播通道重连无法转推的原因排查与解决

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 用户使用EasyDSS平台对直播通道进行转推&#xff0c;发现只要关闭…

Codesys自定义库的帮助文档的美化

文章目录 1.前言2.美化的方式2.1.利用html标签2.2.利用reStructuredText 3.相关说明3.1.使用reStructuredText时&#xff0c;中文注释的问题3.2.将文档需要的图片包含到库中3.3.文档的作用区域 1.前言 当我们在codesys中写好自己的库&#xff0c;并且发布给别人使用时&#xf…

vue基本用法

文本插值 {{}} 用来绑定data方法返回的对象属性 v-bind:为标签的属性绑定data方法中返回的属性 事件绑定v-on:xxx 简写为xxx 双向绑定v-model 条件渲染 v-if v-else v-else-if 动态渲染页面元素

数字政府建设中的锐捷力量:五维构建坚实的数字政务基础设施

3月1日,中国信息协会部分地方信息机构负责人会议暨信息服务业助力高质量发展研讨会在深圳成功召开。来自民政部、农业农村部、国家统计局、人民日报社等部委单位,全国省市信息协会、信息中心、大数据局负责人,信息化领域专家学者在内的230多名代表参加了会议。2024年是立足“二…

C# SwinV2 Stable Diffusion 提示词反推 Onnx Demo

目录 介绍 效果 模型信息 项目 代码 下载 C# SwinV2 Stable Diffusion 提示词反推 Onnx Demo 介绍 模型出处github地址&#xff1a;https://github.com/SmilingWolf/SW-CV-ModelZoo 模型下载地址&#xff1a;https://huggingface.co/SmilingWolf/wd-v1-4-swinv2-tagg…

【开源物联网平台】FastBee使用EMQX5.0接入步骤

​&#x1f308; 个人主页&#xff1a;帐篷Li &#x1f525; 系列专栏&#xff1a;FastBee物联网开源项目 &#x1f4aa;&#x1f3fb; 专注于简单&#xff0c;易用&#xff0c;可拓展&#xff0c;低成本商业化的AIOT物联网解决方案 目录 一、将java内置mqtt broker切换成EMQX5…

电商之战:实时监控竞争对手战术,掌握市场先机!

淘宝天猫、拼多多、抖音、小红书等国内平台&#xff0c;甚至包括亚马逊、速卖通等跨境商家&#xff0c;在竞争如此激烈的电商平台&#xff0c;想要脱颖而出&#xff0c;打造店铺的差异化运营&#xff0c;通过对竞争对手甚至选品的监控可以更好地了解市场趋势和变化。 这有助于…

Jmeter正则表达式提取器

伙伴们是否遇到过以下的场景&#xff1a; 响应报文类似下面的这样 我们要使用phrase后面的其中一个值。 使用正则表达式提取后匹配出多少值&#xff0c;提取结果如下&#xff1a; 现在的问题是&#xff0c;如果我们要使用正则表达式提取后的&#xff1a;使用其中的第1个和第1…

前端H5动态背景登录页面(上)

最近一段时间看一些关于前端的东西&#xff0c;下面分享两个非常不错的前端动态背景登陆页面&#xff0c;还有几个等后面有时间了再整理。 1、彩色气泡登录页面 下面是源代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8…

互联网智慧工地源码,“互联网+建筑大数据”SaaS微服务架构,支持PC端、手机端、数据大屏端

智慧工地源码&#xff0c;支持多端展示&#xff08;PC端、手机端、平板端&#xff09;SaaS微服务架构&#xff0c;项目监管端&#xff0c;工地管理端源码 智能时代的风暴已经融入了我们生活的每个方面&#xff0c;智能手机、iPad等移动终端智能设备已经成为我们生活的必需品。智…

[ 云计算 | AWS ] ChatGPT 竞争对手 Claude 3 上线亚马逊云,实测表现超预期

文章目录 一、前言二、Claude 3 介绍以及相关测试细节三、在亚马逊云科技上体验 Claude 33.1 在 Amazon Bedrock 服务中配置 Claude 33.2 为聊天配置使用 Claude 3 模型3.3 Caude 3 Sonet 聊天体验 四、文末总结五、参考文献 一、前言 3月4号&#xff0c;Anthropic 发布了号称…

基于el-tree实现懒加载穿梭条

一、关键代码 <template><div><!-- 左侧待选列表 --><div class"left-box"><p>待选列表</p><el-input placeholder"输入关键词过滤" v-model"leftFilterText" clearable/><el-treeref"tree…

鱼哥赠书活动第12期:《基于React低代码平台开发》

鱼哥赠书活动第12期&#xff1a;《基于React低代码平台开发》 一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望内容简介&#xff1a;作者简介如何阅读&#xff1a;适合阅读人群&#xff1a;赠书抽奖规则:往期…

OpenText™ Migrate 软件, 结构化、可重复的工作负载迁移,停机时间几乎为零

OpenText™ Migrate 允许用户将任何规模和各种复杂度的物理、虚拟和云工作负载轻松地迁移到任何环境&#xff0c;并且停机时间几乎为零。微调自动化有助于协调流程的每个阶段。 为什么选择 OpenText Migrate&#xff1f; 1、满足您所有迁移需求的单一解决方案 OpenText Migra…