初学vue3心得

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

这几年经济形势不好,国外对程序员的要求不绝都是全栈,国内也逐步要求通才,作为一名后端算法工程师,最近在学vue3,以下是最近学习的一点心得:
所有的npm install命令前面一定要改成cnpm install,提高速度
在main.js中引入了import "element-plus/dist/index.css";这个全局样式之后,其他这个项目的所有的.vue文件都不需要再写style了,除非有自己自界说的style,

import "element-plus/dist/index.css";可以同时顺应手机端和电脑端

<style scoped>
/* 如果需要覆盖全局样式,可以在这里添加 */
</style>
这里scoped的意思是样式仅仅在当前.vue里生效,如果要改,就在这里改
如果没有 scoped,在 <style> 中界说的样式将会应用到整个项目中的所有组件,而不但仅是当前组件。
1.vueDevTools的关闭题目:
新建的vue项目,总是会出现及其烦人的DevTools,新手不知道怎么关,

这个东西一点开照旧一个弹窗,非常凡人,其实关闭方法很简单,在vite.config.js里把ueDevTools(),注释掉就行

2.vue3的项目,main.js是入口,使用element-plus组件,详细参考官网:
快速开始 | Element Plus
main.js里前11行代码都是写死的:src\main.js
注意:这里引入了:import "element-plus/dist/index.css";
这意味着其他所有地方的.vue文件不需要再写style了,只需要templatehe和script就行了
  1. import { createApp } from "vue";
  2. import App from "./App.vue";
  3. import router from "./router";
  4. import ElementPlus from "element-plus";
  5. import "element-plus/dist/index.css";
  6. const app = createApp(App);
  7. app.use(ElementPlus);
  8. app.use(router);
  9. app.mount("#app");
复制代码
一定要在app.vue里面写好import { RouterLink, RouterView } from 'vue-router'
参考我的:src\App.vue
  1. <script setup>
  2. import { RouterLink, RouterView } from 'vue-router'
  3. </script>
  4. <template>
  5.   <RouterView />
  6. </template>
  7. <style scoped>
  8. </style>
复制代码
3.关于@的题目,在vue项目中,
这两个文件都配置了@就是src,然而它们的作用差别,


  • jsconfig.json:仅在 IDE(如 VSCode)中生效,用于提升开辟体验和代码智能提示。
  • vite.config.js:在现实运行和构建项目时生效,确保路径别名 @ 在运行时能够正确映射到 src 目录。
为什么需要同时配置?



  • jsconfig.json:为了在 IDE 中提供更好的开辟体验。如果你不配置 jsconfig.json,VSCode 可能无法辨认 @ 别名,导致代码补全、错误检查等功能失效。
  • vite.config.js:为了确保在现实运行和构建项目时,Vite 能够正确剖析 @ 别名,制止路径剖析错误。
4.一定要在src下新建api文件夹,然后里面写api,:

这里写的是后端的接口,还有axios拦截器也在这里写,参考我的src\api\index.js
  1. import axios from 'axios';
  2. // 创建 axios 实例
  3. const service = axios.create({
  4.     baseURL: 'http://127.0.0.1:8000', //  API 基础 URL
  5.     timeout: 5000, // 请求超时时间
  6. });
  7. // 请求拦截器
  8. service.interceptors.request.use(
  9.     config => {
  10.         // 检查是否需要添加 token,排除登录和注册接口
  11.         if (config.url !== '/login' && config.url !== '/register') {
  12.             const token = localStorage.getItem('token');
  13.             if (token) {
  14.                 config.headers['Authorization'] = `Bearer ${token}`;
  15.             }
  16.         }
  17.         return config;
  18.     },
  19.     error => {
  20.         console.error('请求错误:', error);
  21.         return Promise.reject(error);
  22.     }
  23. );
  24. // 响应拦截器
  25. service.interceptors.response.use(
  26.     response => {
  27.         // 对成功响应的数据进行处理
  28.         return response.data;
  29.     },
  30.     error => {
  31.         // 对响应错误进行统一处理
  32.         if (error.response) {
  33.             const status = error.response.status;
  34.             if (status === 401) {
  35.                 // 令牌过期,跳转到登录页
  36.                 console.log('令牌过期,跳转到登录页');
  37.                 localStorage.removeItem('token');
  38.                 window.location.href = '/login';
  39.             } else if (status === 403) {
  40.                 // 无权限访问
  41.                 console.log('无权限访问');
  42.             } else if (status === 500) {
  43.                 // 服务器内部错误
  44.                 console.log('服务器内部错误');
  45.             } else {
  46.                 // 其他错误
  47.                 console.log('其他错误:', error.response.data.message);
  48.             }
  49.         } else if (error.request) {
  50.             // 请求已发出,但未收到响应
  51.             console.log('请求已发出,但未收到响应');
  52.         } else {
  53.             // 请求配置错误
  54.             console.log('请求配置错误:', error.message);
  55.         }
  56.         return Promise.reject(error);
  57.     }
  58. );
  59. // 定义登录接口
  60. export function login(data) {
  61.     return service({
  62.         url: '/login', // 你的登录接口 URL
  63.         method: 'post',
  64.         data,
  65.     }).then(response => {
  66.         // 打印完整的响应对象
  67.         console.log('登录响应:', response);
  68.         // 尝试访问 access_token 之前,先检查 response.data 是否存在
  69.         if (response) {
  70.             console.log('响应数据:', response);
  71.             // 登录成功后,将 token 存储到 localStorage
  72.             const token = response.access_token;
  73.             const userId = response.user_id;
  74.             if (token) {
  75.                 localStorage.setItem('token', token);
  76.                 localStorage.setItem('userId', userId);
  77.             } else {
  78.                 console.warn('响应中没有 access_token');
  79.             }
  80.         } else {
  81.             console.error('响应数据是 undefined');
  82.         }
  83.         return response; // 返回响应数据
  84.     }).catch(error => {
  85.         // 如果请求失败,也打印错误信息
  86.         if (error.response) {
  87.             // 请求已发出,但服务器响应的状态码不在 2xx 范围内
  88.             console.error('登录失败,服务器返回错误信息:', error.response.data);
  89.             console.error('登录失败,服务器返回状态码:', error.response.status);
  90.         } else if (error.request) {
  91.             // 请求已发出,但没有收到任何响应
  92.             console.error('登录失败,请求已发出但没有收到响应:', error.request);
  93.         } else {
  94.             // 发送请求时发生了某些问题
  95.             console.error('登录失败,发送请求时发生错误:', error.message);
  96.         }
  97.         return Promise.reject(error);
  98.     });
  99. }
  100. // 定义注册接口
  101. export function register(data) {
  102.     return service({
  103.         url: '/register', // 你的注册接口 URL
  104.         method: 'post',
  105.         data,
  106.     }).catch(error => {
  107.         console.error('注册失败:', error);
  108.         return Promise.reject(error);
  109.     });
  110. }
复制代码
5.router里面引用各个界面的地址:src\router\index.js
  1. import { createRouter, createWebHistory } from "vue-router";
  2. import LoginView from "../views/login/index.vue";
  3. import RegisterView from "../views/register/index.vue";
  4. import HomeView from "../views/home/index.vue";
  5. const router = createRouter({
  6.   history: createWebHistory(import.meta.env.BASE_URL),
  7.   routes: [
  8.     {
  9.       path: "/login",
  10.       name: "login",
  11.       component: LoginView,
  12.     },
  13.     {
  14.       path: "/",
  15.       redirect: "/login", // 重定向到登录页面
  16.     },
  17.     {
  18.       path: "/register",
  19.       name: "register",
  20.       component: RegisterView,
  21.     },
  22.     {
  23.       path: "/home",
  24.       name: "home",
  25.       component: HomeView,
  26.     },
  27.   ],
  28. });
  29. export default router;
复制代码
6.只要在router里面注册过的页面,如/register,在任何地方,直接写:
<router-link to='/register'>注册账号</router-link>
即可跳转

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表