vue3搭建实战项目笔记

vue3搭建实战项目笔记

      • 搭建项目笔记
      • 1.1.创建Vue项目
      • 1.2.划分目录结构
        • assets -> 资源(css/font/img)
        • components -> 抽取出来的公共组件
        • hooks -> 组件对应的公共逻辑抽取到hooks文件夹下
        • router -> 路由
        • mock -> 模拟数据的一些配置
        • service -> 网络请求的一些东西,和网络沟通的一些东西
        • stores -> 状态管理器(Pinia)
        • views -> 大的页面视图,路由切换的时候,一般页面会放到这里来
        • utils -> 工具
      • 1.3.css样式的重置
        • 1.3.1 对默认样式进行重置:
        • 1.3.2 设置全局样式变量
      • 1.4 Vue全家桶-路由配置
        • 1.4.1 路由的安装
        • 1.4.2 路由的配置
        • 1.4.3 在App.vue中写上router-view组件占位
        • 1.4.4 代码片段补充-提高开发效率
      • 1.5 Vue全家桶-状态管理
        • 1.5.1 状态管理的选择:
        • 1.5.2 Pinia的安装
        • 1.5.3 创建Pinia
        • 1.5.4 创建store
      • 1.6 补充-vite环境下img图片配置动态路径
      • 1.7 补充-修改第三方UI组件库的样式
        • 1.7.1 用插槽,插入自己的元素
        • 1.7.2 全局定义一个变量,覆盖它默认变量的值
        • 1.7.3 局部定义一个变量,覆盖它默认变量的值
        • 1.7.4 把style中的scoped去掉,相当于对全局生效
        • 1.7.5 直接找到对应的子组件选择器,进行修改

搭建项目笔记

1.1.创建Vue项目

  • 方式一: Vue CLI

    • 基于webpack工具;
    • 命令:vue create xxx
  • 方式二: Vite

    • 基于vite工具;
    • 命令:npm init vue@latest
  • 项目配置:

    • 配置项目的icon
    • 配置项目的标题
    • 配置jsconfig.json

1.2.划分目录结构

assets -> 资源(css/font/img)
components -> 抽取出来的公共组件
hooks -> 组件对应的公共逻辑抽取到hooks文件夹下
router -> 路由
mock -> 模拟数据的一些配置
service -> 网络请求的一些东西,和网络沟通的一些东西
stores -> 状态管理器(Pinia)
views -> 大的页面视图,路由切换的时候,一般页面会放到这里来
utils -> 工具

图片如下:
在这里插入图片描述

1.3.css样式的重置

1.3.1 对默认样式进行重置:
  - normalize.css  npm install normalize.css  - reset.css- 1.在main.js引入normalize.css- 2.新建index.css,分别引入我们自己编写的css样式重置文件- /* 不建议加 url 在vite里面可能会有问题*/- @import "./common.css";- @import "./reset.css";- 3.在main.js引入index.css- import "normalize.css"- import "@/assets/css/index.css"- 4.不建议index.css引入normalize.css  因为两个是独立的文件,一个是我们自己编写的, 一个是第三方的

图片如下:
在这里插入图片描述
在这里插入图片描述

1.3.2 设置全局样式变量
   :root {--primary-color: #ff9854;}

1.4 Vue全家桶-路由配置

1.4.1 路由的安装
  - npm install vue-router
1.4.2 路由的配置
  - 在router文件夹下创建index.js- import { createRouter, createWebHashHistory } from 'vue-router'- index.js详细代码如下:```javascript const router = createRouter({history: createWebHashHistory(),// 映射关系: path  ->  componentroutes: [// redirect:重定向{path: '/',redirect: '/home'},{// 路由懒加载path: '/home',component: () => import('@/views/home/home.vue')},]})export default router;```- 在main.js中引入index.js并注册- import router from './router'- app.use(router)- main.js完整代码如下:```javascript  import { createApp } from 'vue'import App from './App.vue'// router需要写index吗,不需要会默认找import router from './router'createApp(App).use(router).mount('#app')```

index.js详细代码如下:

      const router = createRouter({history: createWebHashHistory(),// 映射关系: path  ->  componentroutes: [// redirect:重定向{path: '/',redirect: '/home'},{// 路由懒加载path: '/home',component: () => import('@/views/home/home.vue')},]})export default router;

main.js完整代码如下:

import { createApp } from 'vue'
import App from './App.vue'
// router需要写index吗,不需要会默认找
import router from './router'createApp(App).use(router).mount('#app')
1.4.3 在App.vue中写上router-view组件占位
      <template><div class="app"><router-view></router-view>{/*导航链接组件跳转  */}<router-link to="/home">首页</router-link><router-link to="/favor">收藏</router-link><router-link to="/order">订单</router-link><router-link to="/message">消息</router-link>App Vue</div></template><script setup></script><style scoped></style>
1.4.4 代码片段补充-提高开发效率
  - 1.新建好代码片段例如:```javascript <template>// 这里写一个占位符的 ${1}  数字一样代表可以同时修改<div class="${1:home}"><h2>${1:home}</h2></div></template><script setup></script><style lang="less" scoped></style>```- 2.在https://snippet-generator.app/网站中生成对应的代码片段json文件- 2.1 把上面准备好的代码片段复制到https://snippet-generator.app/中大文本框里面- 2.2 上面还有两个小输入框,一个是代码片段名称name,一个是代码片段的关键字prefix(有点类似于快捷键)- 2.3 找到首选项配置代码片段找到vue.json- 2.4 直接在vue.json中粘贴代码片段json文件就可以啦

代码片段:

  <template>// 这里写一个占位符的 ${1}  数字一样代表可以同时修改<div class="${1:home}"><h2>${1:home}</h2></div></template><script setup></script><style lang="less" scoped></style>

1.5 Vue全家桶-状态管理

1.5.1 状态管理的选择:
  - Vuex:目前依然使用较多的状态管理库;- Pinia:强烈推荐,未来趋势的状态管理库;
1.5.2 Pinia的安装
  - npm install pinia
1.5.3 创建Pinia
  - 在stores文件夹下创建index.js并导入pinia```javascriptimport { createPinia } from 'pinia'const pinia = createPinia()export default pinia```- 在main.js中引入pinia并注册```javascriptimport { createApp } from 'vue'import App from './App.vue'import pinia from './stores'createApp(App).use(pinia).mount('#app')```

stores/index.js代码片段:

  import { createPinia } from 'pinia'const pinia = createPinia()export default pinia

main.js注册pinia代码片段:

  import { createApp } from 'vue'import App from './App.vue'import pinia from './stores'createApp(App).use(pinia).mount('#app')
1.5.4 创建store
  - 在stores文件夹下创建modules文件夹,在modules文件夹下创建不同的模块的store
   import { defineStore } from 'pinia'//第一个参数是id, 第二个参数是对象const useCityStore = defineStore('city', {state: () => ({cities: []}),actions: {}})export default useCityStore

1.6 补充-vite环境下img图片配置动态路径

- 在vite里面用到的时候动态的URL地址,在vite中必须用URL,因为和vite的机制有关系,vite用的直接是ESModule,ESModule找东西必须通过URL去找
- 解决方法:通过动态路径去找图片- 1.在utils文件夹下新建一个load_assets.js去处理图片```javascriptexport const getAssetURL = (image) => {// 参数一是和参数二当前路径做了一个拼接的形成一个完整路径// 参数一: 相对路径(图片地址)// 参数二:当前文件的URL( import.meta.url,根据这个路径去找图片)const imgURl = `../assets/img/${image}`return new URL(imgURl, import.meta.url).href}```- 那个文件需要用到那个文件导入```javascript<template><template v-for="(item, index) in tabbarData" :key="index"><img :src="getAssetURL(item.image)" alt=""><span class="text">{{item.text}}</span></template></template><script setup>import { getAssetURL } from '@/utils/load_assets'const tabbarData = [{text: '首页',image: 'tabbar/tab_home.png',imageActive: 'tabbar/tab_home_active.png',path: '/home'},{text: '收藏',image: 'tabbar/tab_favor.png',imageActive: 'tabbar/tab_favor_active.png',path: '/favor'},{text: '订单',image: 'tabbar/tab_order.png',imageActive: 'tabbar/tab_order_active.png',path: '/order'},{text: '消息',image: 'tabbar/tab_message.png',imageActive: 'tabbar/tab_message.png',path: '/message'},]<script>```

在这里插入图片描述

utils/load_assets.js代码:

  export const getAssetURL = (image) => {// 参数一是和参数二当前路径做了一个拼接的形成一个完整路径// 参数一: 相对路径(图片地址)// 参数二:当前文件的URL( import.meta.url,根据这个路径去找图片)const imgURl = `../assets/img/${image}`return new URL(imgURl, import.meta.url).href}

引用文件代码:

<template><template v-for="(item, index) in tabbarData" :key="index"><img :src="getAssetURL(item.image)" alt=""><span class="text">{{item.text}}</span></template>
</template><script setup>import { getAssetURL } from '@/utils/load_assets'const tabbarData = [{text: '首页',image: 'tabbar/tab_home.png',imageActive: 'tabbar/tab_home_active.png',path: '/home'},{text: '收藏',image: 'tabbar/tab_favor.png',imageActive: 'tabbar/tab_favor_active.png',path: '/favor'},{text: '订单',image: 'tabbar/tab_order.png',imageActive: 'tabbar/tab_order_active.png',path: '/order'},{text: '消息',image: 'tabbar/tab_message.png',imageActive: 'tabbar/tab_message.png',path: '/message'},]
<script>

1.7 补充-修改第三方UI组件库的样式

1.7.1 用插槽,插入自己的元素
  - 那么在自己的作用域中直接修改这个元素
1.7.2 全局定义一个变量,覆盖它默认变量的值
  - 缺点:全局修改
1.7.3 局部定义一个变量,覆盖它默认变量的值
  - 优点:局部修改   
1.7.4 把style中的scoped去掉,相当于对全局生效
  - 缺点:全局修改
1.7.5 直接找到对应的子组件选择器,进行修改
  - :deep(子组件中元素的选择器)进行修改- 直接修改CSS     

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

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

相关文章

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论&#xff0c;主要分为三个阶段&#xff1a;业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块&#xff08;Business Segment&#xff09; 业务板块是OneData体系架构中的第一步&…

[Computer Vision]实验三:图像拼接

目录 一、实验内容 二、实验过程及结果 2.1 单应性变换 2.2 RANSAC算法 三、实验小结 一、实验内容 理解单应性变换中各种变换的原理&#xff08;自由度&#xff09;&#xff0c;并实现图像平移、旋转、仿射变换等操作&#xff0c;输出对应的单应性矩阵。利用RANSAC算法优…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…

ue5 GAS制作一个技能

新建文件夹 ability 取名BP_BaseAbility 新建一个技能GAB_Melee 上面技能GAB_Melee和技能基类BP_BaseAbility 进入技能GAB_Melee&#xff0c;添加打印火云掌 给这个技能添加标签 点这个号 这样命名&#xff0c;小心这个点&#xff08;.&#xff09;作为分割 ability.ha…

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…

opentelemetry-collector docker安装

一、编写配置 nano /root/otelcol-config.yamlreceivers:otlp:protocols:grpc:endpoint: 0.0.0.0:4317http:endpoint: 0.0.0.0:4318 exporters:debug:verbosity: detailed service:pipelines:traces:receivers: [otlp]exporters: [debug]metrics:receivers: [otlp]exporters: …

Arweave的出块原理

一、Arweave 关键技术 1.1数据结构&#xff1a;Blockweave 区块纺 区块坊中包括区块哈希列表和钱包列表。拥有区块哈希列表使旧区块可以被请求/验证&#xff0c;拥有钱包列表可以验证新交易&#xff0c;而无需处理钱包上一次交易所在的区块。区块哈希列表和钱包列表由矿工保持…

寒假刷题记录

4968. 互质数的个数 - AcWing题库 涉及&#xff1a;快速幂&#xff0c;欧拉函数&#xff0c;分解质因数 #include <bits/stdc.h> #define fi first #define se second #define endl \n #define pb push_backusing namespace std; using LL long long;const int mod 9…

免费下载 | 2024中国智算中心产业发展白皮书

以下是《2024中国智算中心产业发展白皮书》的核心内容整理&#xff1a; 一、智算中心产业发展背景及内涵 背景&#xff1a;智算中心作为新型基础设施&#xff0c;是数字经济的重要支撑&#xff0c;随着人工智能技术的快速发展&#xff0c;智算中心的需求日益增长。 内涵&#…

爬虫基础之爬取某站视频

目标网址:为了1/4螺口买小米SU7&#xff0c;开了一个月&#xff0c;它值吗&#xff1f;_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…

软件测试入门—用例设计中的场景图和状态迁移图

在软件测试领域&#xff0c;用例设计是一项至关重要的工作&#xff0c;它直接关系到软件质量的高低。而场景图和状态迁移图作为用例设计中的两种有效工具&#xff0c;能够帮助测试人员更全面、系统地设计测试用例。下面我们就来深入了解一下这两种图。 一、场景图 场景图主要…

Java面试专题——面向对象

面向过程和面向对象的区别 面向过程&#xff1a;当事件比较简单的时候&#xff0c;利用面向过程&#xff0c;注重的是事件的具体的步骤/过程&#xff0c;注重的是过程中的具体的行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。 面向对象&#xff1a;注重找“参与者…

软件测试—— 接口测试(HTTP和HTTPS)

软件测试—— 接口测试&#xff08;HTTP和HTTPS&#xff09; HTTP请求方法GET特点使用场景URL结构URL组成部分URL编码总结 POST特点使用场景请求结构示例 请求标头和响应标头请求标头&#xff08;Request Headers&#xff09;示例请求标头 响应标头&#xff08;Response Header…

顺序表和链表(详解)

线性表 线性表&#xff08; linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线。…

初阶5 排序

本章重点 排序的概念常见排序的算法思想和实现排序算法的复杂度以及稳定性分析 1.排序的概念 排序: 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。稳定性: 假定在待排序的记录序列中&#xff0…

Flink底层架构与运行流程

这张图展示了Flink程序的架构和运行流程。 主要组件及功能&#xff1a; Flink Program&#xff08;Flink程序&#xff09;&#xff1a; 包含Program code&#xff08;程序代码&#xff09;&#xff0c;这是用户编写的业务逻辑代码。经过Optimizer / Graph Builder&#xff08…

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis&#xff1a;半自动化的ORM框架1.1、代码示例 2、JPA&#xff1a;全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis&#xff1a;灵活的SQL控制1.1、适用场景 2、JPA&#xff1a;开发效率…

计算机视觉——Intel RealSense D435的使用及python环境下的实现

什么是深度相机&#xff0c;以及深度相机的分类和工作原理 ​ 深度相机是一种能够捕捉场景中物体的深度信息&#xff08;即物体与相机之间的距离&#xff09;的设备。与传统的二维相机不同&#xff0c;深度相机除了拍摄图像的颜色和亮度外&#xff0c;还能生成一个关于场景中每…

Servlet快速入门

Servlet 由于目前主流使用SpringBoot进行开发Servlet可以说是时代的眼泪&#xff0c;这篇文章主要介绍我基于SpringBoot对应Servlet的浅薄认知&#xff0c;有利于更好的理解前端界面和java服务器的数据交换过程 快速入门 我比较推荐这篇文章来对Servlet有一个大概的了解 都2…

windows平台intel-vpl编译

需要先在本机编译好opencl库 git clone --recursive https://github.com/KhronosGroup/OpenCL-SDK.git cmake -A x64 -T v143 -D OPENCL_SDK_BUILD_OPENGL_SAMPLESOFF -B OpenCL-SDK\build -S OpenCL-SDKcmake --build OpenCL-SDK\build --config Releasecmake --install O…