【vue3】项目搭建

目录

    • 简介
    • 脚手架
    • 引入axios
    • 引入sass
    • 引入element-plus
    • vite.config.js
    • 路由配置
    • 全局状态管理
    • 完整main.js
    • 组合式API之Setup

简介

vue3:双向绑定改为ES6的Proxy;新的API风格,代码逻辑性更强、更易维护;性能提升,渲染更快、内存更少。
vite:新型前端构建工具,基于原生ES模块,极速启动、快速热更新,更优的开发体验。

以npm install和build过程为例, 之前vue2+webpack的项目在devops的编译环节非常耗时,在2-15min之间均有,vue3+vite的项目基本在1min以内。

脚手架

事先准备
nodejs需要大于16.0版本。
建议先卸载旧有nodejs,再安装nvm,通过nvm安装分别用于vue3项目和vue2项目的nodejs高低版本。

  1. 创建指令:npm create vue@latest
  2. 选项:TypeScript、Vue Router、ESLint 、Prettier (按需即可)
  3. 运行指令:
      npm installnpm run dev
    

引入axios

  1. npm install axios --save
  2. 配置文件axios-config.js,统一封装请求
    /request/axios-config.js
    import axios from "axios";
    import router from "@/router";
    import qs from "qs";/* http request**请求拦截器**在发送请求之前进行的一系列处理,根据项目要求自行配置**例如:loading*/
    axios.interceptors.request.use((config) => {// 请求响应时间config.timeout = 60 * 60 * 1000;config.headers = {token: sessionStorage.getItem("accessToken"),// "Content-Type": "application/json""Content-Type": "application/x-www-form-urlencoded",};return config;},(error) => {// 对请求错误做处理console.log(error); // for debugreturn Promise.reject(error);}
    );/* response**响应拦截器**允许在数据返回客户端前,修改响应的数据**返回体中数据:response.data,如果需要全部,则 return response 即可*/
    axios.interceptors.response.use((response) => response,(error) => {let message = "";// 处理响应错误if (error && error.response) {const errorResponse = error.response.data;if (errorResponse.msg || errorResponse.message) {message = errorResponse.msg || errorResponse.message;if (message.indexOf("无效token") > -1) {sessionStorage.removeItem("accessToken");sessionStorage.removeItem("userinfo");router.push({ path: "/login" });}}}return Promise.reject(error);}
    );const fetchPost = (url, params) => {return new Promise((resolve, reject) => {axios.post(url, qs.stringify(params)).then((res) => {resolve(res.data.data);},(err) => {reject(err.data);}).catch((err) => {reject(err.data);});});
    };const fetchPut = (url, params) => {return new Promise((resolve, reject) => {axios.put(url, qs.stringify(params)).then((res) => {resolve(res.data.data);}).catch((err) => {reject(err.data);});});
    };const fetchDel = (url, params) => {return new Promise((resolve, reject) => {axios.delete(url, {params: qs.stringify(params),}).then((res) => {resolve(res.data.data);}).catch((err) => {reject(err.data);});});
    };
    const fetchGet = (url, params) => {return new Promise((resolve, reject) => {axios.get(url, {params: qs.stringify(params),}).then((res) => {resolve(res.data.data);}).catch((err) => {reject(err.data);});});
    };/*** 不带参数的get请求* @param {*} url*/
    const fetchGetNoParam = (url) => {return new Promise((resolve, reject) => {axios.get(url).then((res) => {resolve(res.data.data);}).catch((err) => {reject(err.data);});});
    };export default {install: (app) => {app.config.globalProperties["$get"] = fetchGet;app.config.globalProperties["$post"] = fetchPost;app.config.globalProperties["$put"] = fetchPut;app.config.globalProperties["$del"] = fetchDel;app.config.globalProperties["$axios"] = axios;},
    };
    
  3. main.js引入
    import Axios from "@/request/axios-config.js";
    const app = createApp(App).use(Axios);
    
  4. .vue使用
    import { getCurrentInstance } from "vue";
    const { proxy } = getCurrentInstance();let data=await proxy.$post("url",{});
    

引入sass

  1. npm install sass --save -dev
  2. npm install sass-loader --save -dev
  3. .vue使用:<style scoped lang="scss"></style>

引入element-plus

  1. npm install element-plus --save
  2. main.js引入
    import "element-plus/dist/index.css";
    import ElementPlus from "element-plus";
    import zhCn from "element-plus/dist/locale/zh-cn.mjs";const app = createApp(App).use(ElementPlus, {locale: zhCn,});
    
  3. 使用见官网

vite.config.js

"@"路径配置及代理配置

import { fileURLToPath, URL } from "node:url";import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";// https://vitejs.dev/config/
export default defineConfig({plugins: [vue()],resolve: {alias: {"@": fileURLToPath(new URL("./src", import.meta.url)),},},server: {port: 8081,https: false,proxy: {"/check": {// 后台地址target: "http://127.0.0.1:18892",changeOrigin: true,// pathRewrite: {//   "^/check": "",// },},},},
});

路由配置

/router/index.js

import { createRouter, createWebHistory } from "vue-router";const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: "/login",name: "login",component: () => import("../views/LoginView.vue"),},{path: "/",name: "home",component: () => import("../views/HomeView.vue"),children: [{path: "/index",name: "index",component: () => import("../views/Index.vue"),},],},],
});router.beforeEach((to, from) => {if (!sessionStorage.getItem("accessToken") && to.name !== "login") {return { path: "/login" };}return true;
});export default router;

main.js引入

import router from "./router";
const app = createApp(App).use(router);

全局状态管理

/store/store.js

import { reactive } from "vue";export const store = reactive({count: 0func: () => {...},
});

.vue使用

<template> {{ store.count }}</template><script setup>
import { store } from './store.js'store.func();
</script>

完整main.js

import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";import "./assets/main.css";import "element-plus/dist/index.css";
import ElementPlus from "element-plus";
import zhCn from "element-plus/dist/locale/zh-cn.mjs";import Axios from "@/request/axios-config.js";const app = createApp(App).use(router).use(ElementPlus, {locale: zhCn,}).use(Axios);app.mount("#app");

组合式API之Setup

一些常用功能示例

<script lang="ts" setup>
import { reactive, ref, getCurrentInstance, computed, onMounted } from "vue";
import { useRouter, useRoute, RouterView } from "vue-router";
const router = useRouter();
const route = useRoute();
const { proxy } = getCurrentInstance();
import { store } from "@/store/store.js";// 计算属性,获取当前路由名称
const current= computed(() => {return route.name;
});// 钩子函数
// 在组件完成初始渲染并创建 DOM 节点后运行
onMounted(() => {init();
});// 响应式变量声明
const showTable = ref(false);
let tableData = reactive([]); // axios请求及store状态管理
const init= () => {tableData = await proxy.$post("/getResultList", {quarter: store.getQuarter(),year: store.getYear(),});showTable.value = true
};// 路由跳转
const goLogin= () => {router.push({ path: "/login" });
};
  • ref:可以是 string、number 或 boolean 这样的原始类型,也可以是对象类型;在js中需要通过 .value,在template不需要;适合于原始类型和浅层级的对象。
  • reactive:只能用于对象类型;不需要 .value;适合于层级比较深的可变复杂对象。

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

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

相关文章

JavaScript:立即执行函数

一、JS立即执行函数模式是一种语法&#xff0c;可以让你的函数在定义后立即被执行&#xff0c;这种模式本质上就是函数表达式&#xff08;命名的或者匿名的&#xff09;&#xff0c;在创建后立即执行。 两种常见写法&#xff1a; 匿名函数包裹在一个括号运算符中&#xff0c;…

【数据库系统概论】关系数据库中的关系完整性

前言实体完整性参照完整性用户定义的完整性SQL Server中常用的完整性约束感谢 &#x1f496; 前言 按照数据模型的三大要素&#xff0c;关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。本篇文章将介绍这三部分内容中的第三部分即关系完整性。关于前两部分可…

Linux嵌入式串口UART测试程序

Linux串口UART测试程序&#xff0c;收到什么&#xff0c;打印什么。 #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<sys/signal.h> #include<fcntl.h> #include&l…

uniapp js 合成canvas画布

代码 <template><view><canvas canvas-id"canvas" class"canvas-c"></canvas><!-- <h1>999</h1> --></view> </template><script>export default {name: sharePos,props: {// 绘制图片的尺寸…

配置OSPF路由

OSPF路由 1.OSPF路由 1.1 OSPF简介 OSPF(Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;路由协议是另一个比较常用的路由协议之一&#xff0c;它通过路由器之间通告网络接口的状态&#xff0c;使用最短路径算法建立路由表。在生成路由表时&#xff0c;…

亚马逊无线鼠标FCC认证办理 FCC ID

无线鼠标是指无线缆直接连接到主机的鼠标&#xff0c;采用无线技术与计算机通信&#xff0c;从而省却电线的束缚。通常采用无线通信方式&#xff0c;包括蓝牙、Wi-Fi (IEEE 802.11)、Infrared (IrDA)、ZigBee (IEEE 802.15.4)等多个无线技术标准。随着人们对办公环境和操作便捷…

RSS订阅

RSS订阅是一种内容聚合的工具&#xff0c;它可以帮助你聚合、分类、整理日常大量信息。以下是使用RSS订阅的一些好处&#xff1a; 获取更新信息&#xff1a;当你订阅了某个网站或者主题&#xff0c;每当有新的内容更新&#xff0c;你都会第一时间收到通知。提高阅读效率&#…

如何有效的进行服务器稳定性测试?

服务器稳定性是最重要的&#xff0c;如果在稳定性方面不能够保证业务运行的需要&#xff0c;再高的性能也是无用的。 正规的服务器厂商都会对产品进行不同温度和湿度下的运行稳定性测试。重点要考虑的是冗余功能&#xff0c;如&#xff1a;数据冗余、网卡冗余、电源冗余、风扇冗…

Vue中动态树形菜单,以及

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

Leetcode205. 同构字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0…

CTP:关于cc和bindgen库及rust工程组织

有三个工程目录&#xff0c;cpt-api, ctp-sdk,ctp-strategy 1、ctp-sdk&#xff1a; 主要的目的是基于bindgen库生成与cpp的.h文件相对应一个binding.rs文件&#xff0c;后面供策略使用。 在这个目录下&#xff0c;建一个build.rs,用bindgen库生成cpp.h的头文件相应的rust绑定…

蓝桥杯每日一题2023.9.29

蓝桥杯大赛历届真题 - C&C 大学 B 组 - 蓝桥云课 (lanqiao.cn) 题目描述1 题目分析 看见有32位&#xff0c;我们以此为入手点&#xff0c; B代表字节1B 8b b代表位&#xff0c;32位即4个字节 (B) 1KB 1024B 1MB 1024KB (256 * 1024 * 1024) / 4 67108864 故答案…

redis主从从,redis-7.0.13

redis主从从&#xff0c;redis-7.0.13 下载redis安装redis安装redis-7.0.13过程报错1、没有gcc&#xff0c;报错2、没有python3&#xff0c;报错3、[adlist.o] 错误 127 解决安装报错安装完成 部署redis 主从从结构redis主服务器配置redis启动redis登录redisredis默认是主 redi…

[JAVA]黑马程序员文字打斗游戏复现

author:&Carlton language:JAVA website: b站黑马程序员 黑马程序员 JAVA 2022斯坦福大学合集面向对象程序设计练习题 目录 Role类 RoleTest类 Role类 package com.itheima.demo2;import java.util.Random;public class Role {private String name;private String fac…

Flutter笔记:用于ORM的Floor框架简记

Flutter笔记 用于ORM的Floor框架简记 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133377191 floor 模块地址&#xff1a;https://pub.dev/packages/floor 【介绍】&#xff1a;最近想找用于Dart和Flutter的ORM框架&#xff0c;偶然间发现了Floor…

Oracle的递归公共表表达式

查询节点id为2的所有子节点的数据&#xff0c;包括向下级联 WITH T1 (id, parent_id, data) AS (SELECT id, parent_id, dataFROM nodesWHERE id 2UNION ALLSELECT t.id, t.parent_id, t.dataFROM nodes tJOIN T1 n ON t.parent_id n.id ) SELECT * FROM T1; --建表语句 C…

什么是Times New Roman 字体

如何评价 Times New Roman 字体&#xff1f;&#xff1a;https://www.zhihu.com/question/24614549?sortcreated 新罗马字体是Times New Roman字体&#xff0c;是Office Word默认自带的英文字体之一。 中英文字体 写作中&#xff0c;英文和数字的标准字体为 Times New Roma…

目标检测YOLO实战应用案例100讲-雾天场景下低能见度图像 目标检测(中)

目录 2.3.3 损失函数与训练方法 2.4 实验与结果分析 2.4.1 改造骨干网络实验分析

华为云云耀云服务器L实例评测 | 实例使用教学之软件安装:华为云云耀云服务器环境下安装 Docker

华为云云耀云服务器L实例评测 &#xff5c; 实例使用教学之软件安装&#xff1a;华为云云耀云服务器环境下安装 Docker 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀云…

十一,从摄像机打印HDR环境贴图

越来越接近真相了。我们很自然地想到&#xff0c;如果把漫游器放在中心打印&#xff0c;是不是就可以打印整个等距柱状投影图了呢&#xff1f;是的&#xff0c;但是&#xff0c;只是要注意的是&#xff0c;立方体贴图的内部和外部尽管一样&#xff0c;但是还是稍微有点模糊&…