Vue3 小兔鲜:项目起步

news2024/9/21 18:08:18

Vue3 小兔鲜:项目起步

Date: May 31, 2023


创建项目并整理目录

npm init vue@latest

https://cdn.nlark.com/yuque/0/2022/png/274425/1670247123883-f43f81f8-7600-4fd7-aa82-2751d9032a54.png#averageHue=%23212120&clientId=ufebee43b-b163-4&from=paste&height=494&id=u1b534575&name=image.png&originHeight=659&originWidth=1280&originalType=binary&ratio=1&rotation=0&showTitle=false&size=3380277&status=done&style=none&taskId=ud39028ba-b1d4-47ed-adf7-79865628edd&title=&width=960



src目录调整

需要补充创建以下文件:

Untitled



git 管理项目

基于create-vue 创建出来的项目默认没有初始化git仓库,需要我们手动初始化

执行命令井完成首次提交

  1. git init
  2. git add .
  3. git commit -m “init”



jsconfig.json配置别名路径

什么是别名路径联想提示

在编写代码的过程中,一旦 输入 @/,VScode会立刻 联想出src下的所有子目录和文件,统一文件路径访问不容易出错

Untitled



如何进行配置

配置别名路径可以在写代码时联想提示路径

  1. 在项目的根目录下新增 jsconfig.json 文件
  2. 添加json格式的配置项,如下:
{
  "compilerOptions" : {
    "baseUrl" : "./",
    "paths" : {
      "@/*":["src/*"]
    }
  }
}

理解:当你输入@/ ,Vscode会把src下所有目录都给你联想下来

深入理解:

vite.config.js这个文件的做的是路径转换的工作

Untitled

我们配置的jsconfig.json做的是路径的联想提示工作




elementPlus引入

小兔鲜项目UI组件:

  1. 通用型组件(ElementPlus)
    1. 比如Dialog模糊框
  2. 业务定制组件(手写)
    1. 商品热榜组件


1. 安装elementPlus和自动导入插件

npm install element-plus --save
npm i elementPlusnpm install -D unplugin-vue-components unplugin-auto-import

注意:这里的-D代表仅在开发环境依赖



2. 配置自动按需导入

// 引入插件 (按需导入)
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    // 配置插件
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ]
})

注意:plugins是vite插件的专门配置位置

总结以上:

首先,我们安装了element-plus及自动导入插件,如下方所示:

Untitled

然后,我们导入插件所需要的包

Untitled

最后,在组件中写代码即可,

值得注意的是,这里我们采用的是按需引入的方式,组件的中如果需要element-plus的组件,则会自动导入,无需我们手动配置。



3. 测试组件

在App.vue中导入

<template>
  <el-button type="primary">i am button</el-button>
</template>

效果:

Untitled




定制elementPlus主题

为什么需要主题定制

小免鲜主题色和elementPlus默认的主题色存在冲突,通过定制主题让elementPlus的主题色和小免鲜项目保持一致

Untitled



具体定制过程:

1. 安装sass

基于vite的项目默认不支持css预处理器,需要开发者单独安装

npm i sass -D

2. 准备定制化的样式文件

这里的写法是sass的写法,从element-plus中获取:

/* 只需要重写你需要的即可 */
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
  $colors: (
    'primary': (
      // 主色
      'base': #27ba9b,
    ),
    'success': (
      // 成功色
      'base': #1dc779,
    ),
    'warning': (
      // 警告色
      'base': #ffb302,
    ),
    'danger': (
      // 危险色
      'base': #e26237,
    ),
    'error': (
      // 错误色
      'base': #cf4444,
    ),
  )
)

之后我们需要在style中新建名叫element的文件夹,并往里面填充index.sass的文件,最后把我们定制的文件存入里面即可。

Untitled


3. 自动导入配置

这里自动导入需要深入到elementPlus的组件中,按照官方的配置文档来

  1. 配置elementPlus采用sass样式配色系统
  2. 自动导入定制化文件进行样式覆盖

具体配置修改如下:

import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 导入对应包
import ElementPlus from 'unplugin-element-plus/vite'
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [
				// 1. 配置elementPlus采用sass样式配色系统
				ElementPlusResolver({ importStyle: "sass"})
			],
    }),
    // 按需定制主题配置
    ElementPlus({
      useSource: true,
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        // 2. 自动导入定制化样式文件进行样式覆盖
        additionalData: `
          @use "@/styles/element/index.scss" as *;
        `,
      }
    }
  }
})



axios安装并简单封装

1. 安装axios

npm i axios


2. 基础配置

官方文档地址: https://axios-http.com/zh/docs/intro

基础配置通常包括:

Untitled

  1. 实例化 - baseURL + timeout

  2. 拦截器 - 携带token 401拦截等

这一块在utils下的http.js中编写(没有就自己创建)

import axios from 'axios'

// 创建axios实例
const http = axios.create({
  baseURL: 'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 5000
})

// axios请求拦截器
instance.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))

// axios响应式拦截器
instance.interceptors.response.use(res => res.data, e => {
  return Promise.reject(e)
})

export default http


3. 封装请求函数并测试

这一块在apis下的testAPI.js下编写(没有就自己编写)

import http from '@/utils/http'

export function getCategoryAPI () {
  return http({
    url: 'home/category/head'
  })
}

最后需要在main.js中补充并测试

import './assets/main.css'

import { createApp } from 'vue'
import { createPinia } from 'pinia'

import App from './App.vue'
import router from './router'

// ***添加***
import { getCategory } from './apis/testAPI'
getCategory().then(res => {
  console.log(res);
})
// ***

const app = createApp(App)

app.use(createPinia())
app.use(router)

app.mount('#app')

思考:

如果项目里面不同的业务模块需要的接口基地址不同,该如何来做?

axios.create() 方法可以执行多次,每次执行就会生成一个新的实例,比如:

const http1 = axios.create({ baseURL: 'url1'})
const http2 = axios.create({ baseURL: 'url2'})



路由整体设计

路由设计原则:

设计一级路由:找内容切换的区域,如果是页面整体切换,则为一级路由

Untitled

理解:如图的路径,path改变,则页面也会随之改变。以上二者为一级路由。

设计二级路由::找内容切换的区域,如果是在一级路由页的内部切换,则为二级路由

Untitled

理解:如上当/后面变成/category时,则页面会变成/下面的一级路由,即二级路由

下面开始配置:

  1. 配置一级和二级页面

Untitled

一级:

<template>
  <div>我是首页</div>
</template>
<template>
  <div>我是登陆页</div>
</template>

二级:

<template>
  我是Category页
</template>
<template>
  我是Home页
</template>
  1. eslint配置(可选)

如果我们在配置过程中遇到如下报错,那么我们需要对eslint配置

Untitled

我们需要在.eslintrc.cjs中进行补充配置文件,添加如下规则即可:

rules: {
	'vue/multi-word-component-names': 0, // 不再强制要求组件命名
}
  1. 配置一级和二级路由

配置router下的index.js

// createRouter:创建router实例对象
// createWebHistory:创建history模式的路由

import { createRouter, createWebHistory } from 'vue-router'
import Login from '@/views/Login/index.vue'
import Layout from '@/views/Layout/index.vue'
import Home from '@/views/Home/index.vue'
import Category from '@/views/Category/index.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  // path和component对应关系的位置
  routes: [
    {
      path: '/',
      component: Layout,
      children: [
        {
          path: '',
          component: Home
        },
        {
          path: 'category',
          component: Category
        }
      ]
    },
    {
      path: '/login',
      component: Login
    }
  ]
})

export default router

总结:

  1. 路由设计的依据是什么?

    内容切换的方式

  2. 默认二级路由如何进行设置?

    path配置项置空

    如图所示,效果:二级路由home的path置空,当访问/时,home页也会展示

    Untitled




静态资源引入和Error Lens安装

图片资源和样式资源:

资源说明

  1. 实际工作中的图片资源通常由 UI设计师提供,常见的图片格式有png,svg等都是由UI切图交给前端
  2. 样式资源通常是指项目初始化的时候进行样式重置,常见的比如开源的 normalize.css 或者手写

资源操作

  1. 图片资源-把 images 文件夹放到assets 目录下
  2. 样式资源-把 common.scss 文件放到styles 目录下


静态资源引入

具体操作:

  1. 图片资源 - 把 images 文件夹放到 assets 目录下
  2. 样式资源 - 把 common.scss 文件放到 styles 目录下 ## 2. Error Lens插件安装 # scss变量自动导入

补充插件:

error lens:是一个实时提供错误警告信息的VScode插件,方便开发

image-20230531200756403

效果:它会把报错信息放在代码右侧

Untitled

为什么要自动导入

在项目里一些组件共享的色值会以SCSS变量的方式统一放到一个名为 var.scss 的文件中,正常组件中使用,需要先导入scss文件,再使用内部的变量,比较繁琐,自动导入可以免去手动导入的步骤,直接使用内部的变量

自动导入配置:

  1. 新增一个 var.scss 文件,存入色值变量

  2. 通过 vite.config.js 配置自动导入文件

在styles中的element配置var.scss

$xtxColor: #27ba9b;
$helpColor: #e26237;
$sucColor: #1dc779;
$warnColor: #ffb302;
$priceColor: #cf4444;

在vite.config.js中

css: {
    preprocessorOptions: {
      scss: {
        // 自动导入scss文件
        additionalData: `
          @use "@/styles/element/index.scss" as *;
          @use "@/styles/var.scss" as *;
        `,
      }
    }
}

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

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

相关文章

通过脚本将本地文件上传到服务器 WinSCP

通过脚本将本地文件上传到服务器 准备工作 安装好WinSCP软件。服务器上配置了Java环境。 编写脚本 以下是一个使用WinSCP软件的脚本示例&#xff0c;用于将本地的JAR包上传到服务器并启动&#xff1a; echo offset WINSCP_PATH"C:\Program Files (x86)\WinSCP\WinSCP.…

中国人民大学与加拿大女王大学金融硕士项目——在职读金融硕士,没想到收获这么多

随着社会经济的快速发展&#xff0c;金融专业的报考越来越受欢迎。近些年来&#xff0c;市场对于金融专业的高端人才需求不断增加。工作多年的金融人或有计划跳槽到金融领域的群体&#xff0c;都想通过业余时间充电以增强在金融行业的竞争力。在职读金融硕士有用吗&#xff1f;…

基于Element的Select下拉选组件(支持快速全选)

Select下拉选增强 支持快速多选、tooltip等 示例图 1. quicklySelectAll: boolean 在多选模式下支持快速全选取消全选,默认开启 <template><div id"app"><div class"container"><el-form ref"formRef" :model"formD…

Framework开发环境搭建

Framework开发环境搭建 开启Android Framework之旅&#xff0c;一步步记录自己学习过程。 硬件配置 RAM&#xff1a;最低16GB&#xff0c;建议32GB&#xff0c;有条件64GB&#xff0c;内存越高&#xff0c;编译时间越短ROM&#xff1a;最低400GB&#xff0c;代码250GB构建15…

第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的IR值&#xff0c;第二个值是实时的心跳&#xff0c;第三个值是平均心跳&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;MAX30102心率传感器的外观如下…

Linux:开机自动挂载磁盘出错 两种解决办法 /etc/fstab

假如在/etc/fstab文件中有一个错误的语句 但是我们假装不知道&#xff0c;直接给他重启 第一种 开机自动进入到一个这样的界面 在这我们直接输入root的密码 进入到root下 直接 vi /etc/fstab 先将错误的删除掉&#xff0c;等正常开机了再去做挂载 然后重启 正常进入系统 第二…

基于机智云物联网平台的智能种树小车

前言:针对目前人工种树效率低的问题&#xff0c;设计了一种全自助高效智能种树小车。介绍了装置的结构组成&#xff0c;剖析了装置的运动机理。通过SolidWorks三维软件对传动部件进行了结构设计。 利用蓝牙模块实现了种植过程的信息传递、发送命令等&#xff0c;物联网机智云模…

Fiddler+Proxifer 实现PC端软件的抓包

FIddlerProxifer 实现PC端软件的抓包 下载Proxifer https://www.proxifier.com/download/ Proxifier配置 默认是关闭HTTP协议的&#xff0c;使用需要配置开启&#xff0c;配置文件->高级->HTTP代理服务器->启用HTTP代理服务器支持 配置Proxifer代理服务器&#x…

4.数据结构期末复习之森林和最优二叉树(哈夫曼树)

1.森林的定义&#xff1a;m>0 颗互不相交的树的集合 //树和森林的区别 2.森林的遍历 for森林里的树(前序和后序遍历) 3.树转二叉树(兄弟连起来,去右线) 1.兄弟之间加线(树和树之间不加) 2.右孩子去线(只保留第一个结点的线) 3.顺时针调整45度位置变成二叉树 4.森林转二叉…

网络安全 2023 年为什么如此吃香?事实原来如此.....

前言 由于我国网络安全起步晚&#xff0c;所以现在网络安全工程师十分紧缺。俗话说:没有网络安全就没有国家安全 为什么选择网络安全&#xff1f; 十四五发展规划建议明确提出建设网络强国&#xff0c;全面加强网络安全保障体系和能力建设&#xff0c;加强网络文明建设&#x…

OpenGl之变换

目录 缩放 位移 齐次坐标(Homogeneous Coordinates) 旋转 缩放 对一个向量进行缩放(Scaling)就是对向量的长度进行缩放&#xff0c;而保持它的方向不变。由于我们进行的是2维或3维操作&#xff0c;我们可以分别定义一个有2或3个缩放变量的向量&#xff0c;每个变量缩放一个轴…

软件测试之-测试用例写作规范

软件测试用例得出软件测试用例的内容&#xff0c;其次&#xff0c;按照软件测试写作方法&#xff0c;落实到文档中&#xff0c;两者是形式和内容的关系&#xff0c;好的测试用例不仅方便自己和别人查看&#xff0c;而且能帮助设计的时候考虑的更周。 一个好的测试用例必须包含…

语音信号处理——噪声抑制

简介 噪声抑制技术用于消除背景噪声&#xff0c;改善语音信号的信噪比和可懂度&#xff0c;让人和机器听的更清楚常见的噪声种类&#xff1a;人声噪声、街道噪声、汽车噪声噪声抑制方法的分类&#xff1a; 按照输入通道数分&#xff1a;单通道降噪、多通道降噪按照噪声统计特性…

Overview of Blockchain区块链概述

目录 1.def 2.smart contract 3.Consensus mechanism 4.blockchain fork 比特币诞生的几年后&#xff0c;人们开始意识到区块链技术本身的潜力&#xff0c;慢慢走出了自己的发展路线。 通常区块链被定义为一种去中心化的分布式账本技术&#xff0c;最初用来记录信息&#x…

洛谷——SP1-TEST - Life, the Universe, and Everything +注册SPOJ的方法

文章目录 TEST - Life, the Universe, and Everything题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示Information注意注册SPOJ的方法我应该如何注册 SPOJ&#xff1f;注册流程原因 AC代码 TEST - Life, the Universe, and Everything 题面翻译 从输入读…

从零搭建微服务-注册中心(二)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff1a;https://gitee.com/csps/mingyue 文档地址&#xff1a;https://gitee.com/csps/mingyue/wikis 核心依赖 需要注册配置中心的服务引入下面 …

CountDownLatch详解以及用法示例

一、什么是CountDownLatch CountDownLatch中count down是倒数的意思&#xff0c;latch则是门闩的含义。整体含义可以理解为倒数的门栓&#xff0c;似乎有一点“三二一&#xff0c;芝麻开门”的感觉。 CountDownLatch的作用也是如此&#xff0c;在构造CountDownLatch(int coun…

订单管理轻松上手:低代码平台助力企业数字化转型

随着电子商务的发展和普及&#xff0c;企业的订单管理工作变得越来越复杂&#xff0c;传统的手工处理方式已经无法满足企业的需求&#xff0c;需要一种更高效、更精确、更可靠的订单管理方式。而低代码技术正是满足这一需求的一种有效解决方案。 一、订单管理的重要性 企业的…

高频面试八股文原理篇(三)Array,Vector,ArrayList和LinkedList区别

目录 数组(Array)和列表(ArrayList)的区别 Arrays工具类 Vector,ArrayList, LinkedList的区别 ArrayList扩容机制&#xff08;原理) arrayList为什么线程不安全&#xff1f; 数组(Array)和列表(ArrayList)的区别 Array可以包含基本类型和对象类型&#xff0c;ArrayList只能…

电脑重装系统后,打印机驱动没了怎么办

驱动人生获悉&#xff0c;据微软最新消息&#xff0c;23年6月将对Windows 10进行强制升级&#xff0c;自动升级到22H2版本。不少用户听闻后&#xff0c;开始纷纷将系统重装到了Windows 11等&#xff0c;不过升级也以为着很多系统的东西需要推倒重来&#xff0c;其中就包括打印机…