snippets router pinia axios mock

news/2025/1/24 20:42:00/

文章目录

  • 补充
    • VS Code 代码片段
    • 注册自定义组件
    • vue router
    • pinia
    • 删除vite创建项目时默认的文件
    • axios
    • mock
      • 3.0.x版本的 viteMockServe

补充

为文章做补充:https://blog.csdn.net/yavlgloss/article/details/140063387

VS Code 代码片段

在这里插入图片描述

  • 为当前项目创建 Snippets
    在这里插入图片描述
{"Vue 3 Component": {"prefix": "v3ts","body": ["<template>","  <div class=\"${1:component-name}\">","    ${2:<!-- Your content here -->}","  </div>","</template>","","<script setup>","import { ref } from 'vue';","","// Props","// defineProps({});","","// Emits","// defineEmits(['${3:eventName}']);","","// Reactive state","const ${4:stateName} = ref(${5:initialValue});","","// Methods","function ${6:methodName}() {","  ${7:// Your logic here}","}","</script>","","<style scoped>",".${1:component-name} {","  ${8:/* Add your styles here */}","}","</style>"],"description": "Generate a Vue 3 component template with script setup and scoped style"}
}

保存之后,以后可以用 v3ts 快速创建代码
在这里插入图片描述

注册自定义组件

vue router

pnpm add vue-router

在项目中创建路由配置文件,一般放在 src/router 目录下。

import { createRouter, createWebHistory } from 'vue-router';// 路由规则
const routes = [{path: '/',name: 'Home',component: () => import('@/views/Home.vue'), // 按需加载}
];// 创建路由实例
const router = createRouter({history: createWebHistory(), // 使用 HTML5 模式的路由routes,
});export default router;

新建 views/Home.vue

<template><div class="Home"><h1>!!!!!!!!!!!!!!!!</h1><!-- Your content here --></div>
</template><script setup>
import { ref } from 'vue';</script><style scoped>
.Home {/* Add your styles here */
}
</style>

在 App.vue 中添加 <router-view>

在 main.js 中注册了路由。

import { createApp } from 'vue';
import App from './App.vue';
import router from './router'; // 引入路由const app = createApp(App);app.use(router); // 注册路由
app.mount('#app');

pinia

  • pnpm add pinia

  • 在 main.js 中注册 Pinia

import { createApp } from 'vue';
import { createPinia } from 'pinia';
import App from './App.vue';const app = createApp(App);// 创建 Pinia 实例
const pinia = createPinia();// 注册 Pinia
app.use(pinia);app.mount('#app');
  • 创建一个 Store
    在项目中创建一个存储状态的 Store 文件夹,例如 src/stores。
src/
├── stores/
│   └── counter.js
  • src/stores/counter.ts
import { defineStore } from 'pinia';export const useCounterStore = defineStore('counter', {// 状态state: () => ({count: 0,name: 'Pinia Store',}),// 计算属性getters: {doubleCount: (state) => state.count * 2,},// 方法actions: {increment() {this.count++;},decrement() {this.count--;},},
});
  • 在组件中使用 Store
    示例组件:使用 Store 的状态和方法
<template><div><h1>{{ counter.name }}</h1><p>Count: {{ counter.count }}</p><p>Double Count: {{ counter.doubleCount }}</p><button @click="counter.increment">Increment</button><button @click="counter.decrement">Decrement</button></div>
</template><script setup>
import { useCounterStore } from '@/stores/counter';
const counter = useCounterStore();
</script>

删除vite创建项目时默认的文件

删除style.css

在main.ts中删除 import ‘./style.css’

axios

二次封装。

mock

这里我为了和之前的项目保持一致,指定了mockjs的版本

pnpm install -D vite-plugin-mock@2.9.6 mockjs
  • 在 vite.config.ts 中配置 viteMockServe
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons' // SVG需要用的插件
import { viteMockServe } from 'vite-plugin-mock' // mock
import path from 'path' //node提供的模块,可以获取某个文件或者文件夹的路径// https://vite.dev/config/
export default defineConfig(({ command }) => {return {plugins: [vue(),createSvgIconsPlugin({// Specify the icon folder to be cachediconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],// Specify symbolId formatsymbolId: 'icon-[dir]-[name]',}),viteMockServe({mockPath: 'mock',localEnabled: command == 'serve', // 本地启动时启用}),],resolve: {alias: {'@': path.resolve('./src'), // 相对路径别名配置,使用 @ 代替 src},},//scss全局变量的配置css: {preprocessorOptions: {scss: {javascriptEnabled: true,additionalData: '@import "@/styles/variable.scss";',},},},}
})
  • 根目录 下创建 mock文件夹,创建 mock\user.ts
  • user.ts(这里的数据信息来自 硅谷甄选)
//用户信息数据
function createUserList() {return [{userId: 1,avatar:'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',username: 'admin',password: '111111',desc: '平台管理员',roles: ['平台管理员'],buttons: ['cuser.detail'],routes: ['home'],token: 'Admin Token',},{userId: 2,avatar:'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',username: 'system',password: '111112',desc: '系统管理员',roles: ['系统管理员'],buttons: ['cuser.detail', 'cuser.user'],routes: ['home'],token: 'System Token',},]
}export default [// 用户登录接口{url: '/api/user/login',//请求地址method: 'post',//请求方式response: ({ body }) => {//获取请求体携带过来的用户名与密码const { username, password } = body;//调用获取用户信息函数,用于判断是否有此用户const checkUser = createUserList().find((item) => item.username === username && item.password === password,)//没有用户返回失败信息if (!checkUser) {return { code: 201, data: { message: '账号或者密码不正确' } }}//如果有返回成功信息const { token } = checkUserreturn { code: 200, data: { token } }},},// 获取用户信息{url: '/api/user/info',method: 'get',response: (request) => {//获取请求头携带tokenconst token = request.headers.token;//查看用户信息是否包含有次token用户const checkUser = createUserList().find((item) => item.token === token)//没有返回失败的信息if (!checkUser) {return { code: 201, data: { message: '获取用户信息失败' } }}//如果有返回成功信息return { code: 200, data: {checkUser} }},},
]
  • 二次封装axios后 App.vue
onMounted(()=>{request({url: '/user/info',method: 'get'}).then(res => {console.log(res);});// axios.post('/api/user/login')request({url: '/user/login',method: 'post',data: {username: 'admin',password: '111111'}}).then(res => {console.log(res);});
})
  • 这一次我项目搭建出错的点在 ①mock文件夹创建的位置错了(我没放在根目录下 放在src下了) ②我尝试着用 request.get 获取,但是一直没有获取到正确的信息,原因是对代码不熟,mock中定义的get方法是要设置header的。

3.0.x版本的 viteMockServe

localEnabled 字段改成了 enabled


http://www.ppmy.cn/news/1565870.html

相关文章

从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型

作者&#xff1a;王世发&#xff0c;吴艳兴等&#xff0c;58同城数据架构部 导读&#xff1a; 本文介绍了58同城在其数据探查平台中引入StarRocks的实践&#xff0c;旨在提升实时查询性能。在面对传统Spark和Hive架构的性能瓶颈时&#xff0c;58同城选择StarRocks作为加速引擎&…

青少年编程与数学 02-007 PostgreSQL数据库应用 17课题、事务处理

青少年编程与数学 02-007 PostgreSQL数据库应用 17课题、事务处理 一、事务处理二、隔离级别三、注意事项四、应用示例 课题摘要:本课题讨论了PostgreSQL中的事务处理&#xff0c;包括事务的关键特性&#xff08;原子性、一致性、隔离性、持久性&#xff09;和控制事务的命令&a…

pytest自动化测试 - pytest夹具的基本概念

<< 返回目录 1 pytest自动化测试 - pytest夹具的基本概念 夹具可以为测试用例提供资源(测试数据)、执行预置条件、执行后置条件&#xff0c;夹具可以是函数、类或模块&#xff0c;使用pytest.fixture装饰器进行标记。 1.1 夹具的作用范围 夹具的作用范围&#xff1a; …

14-6-1C++的list

(一&#xff09;list容器的基本概念 list容器简介&#xff1a; 1.list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 2.list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[ ]操作符 &#xff08;二&#xff09;list容器头部和尾部的操作 list对象的默…

Python新春烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

【前端】CSS学习笔记(2)

目录 CSS3新特性圆角阴影动画keyframes 创建动画animation 执行动画timing-function 时间函数direction 播放方向过渡动画&#xff08;transition&#xff09; 媒体查询设置meta标签媒体查询语法 雪碧图字体图标 CSS3新特性 圆角 使用CSS3border-radius属性&#xff0c;你可以…

kalman滤波器C++设计仿真案例

很多同学看了我之前的文章&#xff0c;都对kalman滤波器的原理有了理解&#xff0c;但我发现&#xff0c;在具体工程设计过程中&#xff0c;还是很多人都感觉到无从下手&#xff0c;一些参数也不知道如何选取。 这样吧。我这里举一些简单的例子&#xff0c;并用C来一步一步的进…

springboot 调用 c++生成的so库文件

一、创建c文件 SoTest.h #pragma once class SoTest {int Add(int a,int b); };SoTest.cpp #include "SoTest.h"int SoTest::Add(int a, int b) {return a b; }二、创建so文件 /home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so 三、java代码 Maven依…