记录自己搭建前端项目的学习过程和开发过程,希望一起学习进步

采用Vue3+element-plus+axios+vue-router+sass……(目前刚开始是用到了这些,随着开发慢慢更新)

npm是比较慢的, 所以我用的是pnpm。安装指令:npm i pnpm

简单介绍下作用

Vue3:前端框架,能看我这个博客的应该不用我介绍了吧~

element-plus:前端组件库,以前我比较喜欢naive的样式,最近发现element的支持虚拟化table,可以渲染大量数据,所以这次就选用这个了

axios:类似ajax,主要用于发送请求

vue-router:vue算是单页面框架,路由可以在你的页面中来回跳转这样子。

sass: 支持嵌套css,也还不错,可用可不用。看喜好(我是觉得有比没有好,多学点,虽然不是很重要的一部分)

第一步,使用vite创建初始的vue项目。vite相当于vue脚手架。是目前官方推荐的(对于现在的我来说,好像也没什么区别,反正就是用来初始化一个项目模板~)

指令:pnpm create vite,随后根据提示设置项目名(好像是全部都得小写,我没试过大写会怎么样),选择项目模板vue,选择脚本语言 JS(如果你懂ts更好,因为vue3的官方文档好像都是ts为主,包括组件库也是ts案例)

第二步,安装需要用到的组件库,或者其他的包。

我写的时候是一个一个引入的,比如我先引入element-plus,然后导入,然后测试是否正确引入。然后做了个登录页面,然后再引入了路由,用作登录之后跳转到home主页面,然后引入axios发送请求,再然后觉得css写的不好,引入了sass……下面我直接写对应的指令:

安装element组件库: pnpm install element-plus

安装sass:pnpm i sass

安装 vue-router:pnpm i vue-router

……

 其实要用什么,官网都会写指令,我不继续写了。

第三步,假设你此时写了 登录界面Login,登录成功跳转到主界面Home。此时我们不考虑两个界面具体如何,我们要做的就是可以互相跳转。那么此时需要用到的就是路由(vue-router)

可以在main.js里写,但是似乎一般开发都会将其封装成单独的JS文件,然后引入使用,我这里也是如此,我不贴全部的代码了,只做基础的讲解,节省篇幅,我会把我写的项目放到开源的git仓库,大家一起学习吧!

这个是我们封装的router.js文件,目前只有两个.vue页面,那后期页面多的话,行数更多,所以不会直接在main.js去配置。

//导入路由
import { createRouter,createWebHistory } from "vue-router";
//导入vue页面
import Home from '../components/Home.vue'
import Login from '../components/Login.vue'
//设置路由集合
const routes = [
{ path: '/Home/:id?', component: Home },
{path:'/',component:Login}
]
//创建路由实例
const router = createRouter({
history:createWebHistory(),
routes:routes
})
//导出默认路由规则
export default router

main.js引入我们封装的router.js文件,并且挂载app组件上

import { createApp } from 'vue'
import App from './App.vue'
//这个是导入封装的router文件
import router from './config/router.js'
//这个是导入element-plus
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
//创建vue实例
var app = createApp(App)
//使用导入的一些组件库或者封装的文件
app.use(ElementPlus)
app.use(router)
//绑定到id为app的div
app.mount('#app')

此时基本完成了,然后我们需要在app.vue页面的template中加上router-view。这个会把匹配到的路由的页面渲染到此处。

<template>
<router-view></router-view>
</template>

router-link是跳转到对应路由的组件,目前我是没用到,可以做点击跳转的功能。这儿点比较简单,可以看官网学习。我不写了

入门 | Vue Router (vuejs.org)

第四步,完善登录界面,这点比较考验审美和css的基础。

按照常规的H5来做就可以,不过肯定是在element-plus的基础上。可以去官网找到对应的组件模板。我这里使用的是form组件。具体代码我就不多写了。因为官网大部分都有,我回头会把我遇到的坑单独的写出来,然后大家注意下就好了。(主要是js和ts写法有些不一样,会踩坑)

我的登录界面:本身使用了组件库,基本的样式都有,无非是跳转下大小啦,位置啦,显示的文字啦这些,form还有表单验证,也是可以使用的,挺不错的,很好看也很好用

Home页面目前不重要,主要是在于我们登录成功之后能跳转就好了。

第五步,封装axios,用于请求服务端。

(这里是踩了一下坑的……)跟封装router差不多,也是添加一个axios的js文件。导入axios。如果第一次用,可以去官网看看基本的一些配置说明

Axios 中文文档 | Axios 中文网 | Axios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.js (axios-http.cn)

我只封装了 get,post请求。一般来说这两个就足够了

//引入axios
import axios from 'axios'
//根URl,一般就是公共的请求url
const rootUrl = 'http://XXXX/api'
//axios请求实例:
//url是rootUrl后面的具体方法
//methond代表是哪种请求:get,post等
//data:参数放在请求体内
//params:参数拼接在url上
//success:请求成功之后的操作
//err:请求失败的操作
//axios实例中不懂的可以去官网看一下
function https(url, method, data, params, success, err) {
axios({
method: method,
url: url,
data: data,
baseURL: rootUrl,
headers: {
// 'Content-Type':'application/json'
},
params: params,
timeout: 3500,
withCredentials: false
}).then(res => {
if (res.data.state == 200) {
success(res.data)
}
}).catch(function (error) {
console.log(error);
});
}
//导出方法:只做了get和post
export default ({
get: function (url, data, params, success, err) {
https(url, 'get', data, params, success, err);
},
post: function (url, data, params, success, err) {
https(url, 'post', data, params, success, err);
}
})

封装之后别忘了在main.js导入,并且挂载全局!这里我是踩坑的了,小白可以细看下…先贴代码后写结论

(导入路由的部分没一起贴,讲到哪一部分就贴哪一部分的,省的回头太多了也看的迷糊)

import { createApp } from 'vue'

import App from './App.vue'
//导入封装的axios组件
import httpAxios from './config/axios.js' var app = createApp(App)
//挂载全局
app.provide('axios',httpAxios); app.mount('#app')

我踩的坑的地方是挂载全局这块儿:大约在半年前,我记得挂载全局使用的是app.config.globalProperties.$api = api(这个api就是你导入的封装好的axios.js的名字)。但是现在这种方法竟然不行了!搜一些vue3的教程就是这样的呀,看官网其实我觉得讲的也不清楚,笑死,就这样查了大半天时间(主要还是尝试解决以config这种写法)…,后来终于找到了一个可以用的。就是我上面代码贴的app.provide('axios',httpAxios);说句丢人的话,我不精通前端,所以官网的解释我一开始就没看懂55…反正是得到了正确的解决方法就好啦~吼吼吼~  provide 和 inject 通常成对一起使用,所以provide挂载全局之后,需要用的地方就要使用inject 。

比如此时我的login页面。点击登录页面,就要请求接口了。不过写这个博客的时候,我请求的接口是发送邮件的接口,所以这里就以发送邮件为案例。

<script setup>
//导入vue里的组件
import { reactive, ref, inject } from 'vue'
//获取axios,这个就是取刚才挂载的全局axios了,后面的''代表如果没用就是''
const axios = inject('axios', '');
//发送邮箱按钮5秒发送一次
function sendMail() {
//发送请求
if (Login.userEmail != null) {
var params = {
email: Login.userEmail
}
axios.get('XXX', null, params, res => {
console.log(res);
});

}
}
</script>

我标红的一部分我要解释下,xxx就是请求的方法,封装axios的时候不是设置了baseurl吗?所以真正请求的url就是baseurl+xxx这个例如baseurl=http://123.com,xxx表示GetCode方法。真正的请求就是http://123.com/GetCode。一般get请求参数在params,所以第二个参数data我就传null了。第三个参数params,第四个是success的回调函数。如果你还是不理解,可以看看封装的axios里面,大概就会明白了。

到了这里,axios也已经正确的配置好了。接下来就要完善登录之后跳转home页面的具体操作了。现在是2023-8-27-23:52,我还没写完,所以暂时博客就到这里了!后面等我做好之后会继续更新的~~~

我可能博客写的不好,如果有错误希望大佬可以指出来,大家一起学习进步~~~~

git地址前端:反正也不被需要/manage-bbs-vue - 码云 - 开源中国 (gitee.com)

git地址后端:Net6WebAPI: 基于Net6的WebAPI项目。仓储模式,封装了基础增删改查,可根据需求自定义或重写基础接口。 (gitee.com)

(能给我点个star更好嘿嘿!)

vue3项目实战+element-plus的更多相关文章

  1. Vue3 项目实战

    使用Vue3 开发一个小米商城 业务流程 登录---> 产品首页--->产品站--->产品详情 购物车--->订单确认--->订单支付--->订单列表 业务开发流程 ...

  2. FastAPI小项目实战:电影列表(Vue3 + FastAPI)

    假期过半, FastAPI + Vue3项目实战 视频也算录完了,尽管项目简单(2张表 共7个接口 4个页面) 起因 在6月底的时候开始录制了FastAPI官方文档中的新手教程部分(实际还没有官网文档 ...

  3. 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚

    新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...

  4. 【Vue3+Express实战】项目开发环境搭建

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  5. Selenium Web 自动化 - 项目实战(三)

    Selenium Web 自动化 - 项目实战(三) 2016-08-10 目录 1 关键字驱动概述2 框架更改总览3 框架更改详解  3.1 解析新增页面目录  3.2 解析新增测试用例目录  3. ...

  6. webpack+vue项目实战(四,前端与后端的数据交互和前端展示数据)

    地址:https://segmentfault.com/a/1190000010063757 1.前言 今天要做的,就是在上一篇文章的基础上,进行功能页面的开发.简单点说呢,就是与后端的数据交互和怎么 ...

  7. AngularJS进阶(三十九)基于项目实战解析ng启动加载过程

    基于项目实战解析ng启动加载过程 前言 在AngularJS项目开发过程中,自己将遇到的问题进行了整理.回过头来总结一下angular的启动过程. 下面以实际项目为例进行简要讲解. 1.载入ng库 2 ...

  8. React项目实战:react-redux-router基本原理

    React相关 React 是一个采用声明式,高效而且灵活的用来构建用户界面的框架. JSX 本质上来讲,JSX 只是为React.createElement(component, props, .. ...

  9. selenium(12)-web UI自动化项目实战(PO模式,代码封装)

    web UI自动化项目实战-项目 项目使用禅道,所以你需要搭建1个禅道,搭建禅道的方法和步骤见 https://www.cnblogs.com/xinhua19/p/13151296.html 搭建U ...

  10. 【electron+vue3+ts实战便笺exe】二、electron+vue3开发内容

    不要让自己的上限成为你的底线 本来以为有万字的..没想到才堪堪近6000字.为了水文的嫌疑,只挑了重点的地方讲,比如component内的组件就挑了右键弹窗去说明,建议在看本文的时候边查看项目,有不懂 ...

随机推荐

  1. 浅析Jvm

    浅析Jvm 基本概念 引言 Java 虚拟机(JVM,Java Virtual Machine)是 Java 生态系统的核心组成部分,它为 Java 应用程序提供了一个运行环境.JVM 的主要职责是将 ...

  2. 最详细CentOS7.6安装openGauss5.0.3教程

    一.环境准备 1.1 主机信息 项目 内容 操作系统 CentOS7.6 IP 192.168.4.201 主机名 opgs201 CPU 8core 内存 16GB 磁盘1 100GB 1.2 操作 ...

  3. 关于uniapp的兼容性的一些问题

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  4. KubeSphere 迈向新的里程碑 —— 10000 颗星星!

    喜大普奔,开源项目 KubeSphere 于近期在 "云原生分布式操作系统" 的征程中迈入新的里程碑 -- GitHub Star 数量突破 10,000! 真心感谢每一位贡献者. ...

  5. springboot-实现excle文件导出的单元格相同内容合并

    导出excle文件中的单元格有些需要合并如何操作 例如:左边的表格想合并单元格成右边的表格更加便于观看           一.依赖文件 <!-- excle操作--> <depen ...

  6. [网鼎杯 2020 朱雀组]phpweb

    打开靶机,抓包分析,获得连个关键参数func和p,根据初始页面提示了解连个参数大概是功能和功能参数 测试func=system&p=ls提示hacker..说明有检测过滤 那么我们先读取源码看 ...

  7. TypeError: fs.existsSync is not a function | import { ipcRenderer } from 'electron'

    在electron的渲染进程中导包会发生TypeError: fs.existsSync is not a function node_modules/electron/index.js:6 var ...

  8. Django框架表单基础

    本节主要介绍一下Django框架表单(Form)的基础知识.Django框架提供了一系列的工具和库来帮助设计人员构建表单,通过表单来接收网站用户的输入,然后处理以及响应这些用户的输入. 6.1.1 H ...

  9. Cisco Packet Tracer 交换机代码

    二层交换机S1代码: >en #conf  t #vlan 10 #vlan 20 #int r f 0/1-5 #sw a v 10 #int r f 0/6-10 #sw a v 20 #i ...

  10. dephi winspy Demo

    在spy+中未找到这样的功能 有个隐藏窗口的进程,相让窗口显示出来,虽然可以找到进程ID,然后再逐步找到主窗口句柄,但又没句柄发各种消息的软件. 计得以前有个窗口精灵之类的,网上找了很多,要么没有此功 ...