从0到1开发一个vue3+ts项目(一)

1. 环境配置

1.1 安装node

使用官方安装程序

  1. 前往 Node.js 官网:访问 Node.js 官网,下载适合你操作系统的安装程序。
  2. 运行安装程序:下载完成后,双击安装程序并按照提示进行安装。
  3. 验证安装:安装完成后,在终端或命令提示符中输入 node -vnpm -v 来验证 Node.js 和 npm(Node.js 包管理器)是否成功安装。

使用 nvm(Node 版本管理器)

nvm 是一个 Node.js 版本管理器,允许你在同一台机器上安装和切换不同版本的 Node.js。

  1. 安装 nvm:访问 nvm官网,下载nvm-setup.zip安装包
  2. 安装 Node.js:安装完 nvm 后,使用以下命令安装 Node.js:
    输入 **nvm install 版本号** 安装指定版本node
    
  3. 使用 Node.js:安装完成后,你可以使用以下命令来切换和使用不同版本的 Node.js:
    nvm use 版本号
    

1.2 安装vue

  1. 打开终端(命令提示符、终端或PowerShell)。
npm install -g @vue/cli
  1. 安装完成后,通过运行以下命令来确认Vue CLI是否安装成功:
vue --version
  1. 创建一个新的Vue项目
vue create my-project
  1. 进入项目文件夹,并启动开发服务器:
cd my-project
npm run serve

2. 项目用到的vue3知识

2.1 vue常用指令

1. v-ifv-show:根据表达式的bool值进行判断是否渲染该元素

2. v-on

  • 作用:使用 v-on 指令绑定 DOM 事件,并在事件被触发时执行一些 JavaScript 代码。
  • 语法: @事件名.修饰符 = “methods中的方法名”

3. v-for:根据一组数组或对象的选项列表进行渲染。在使用v-for时,要把一个唯一值赋值给:key属性(通常是数组的index或者数据的id);v-for 指令需要使用 item in items 形式的特殊语法,items 是源数据数组 /对象

4. v-bind:绑定标签上的属性。

2.2 响应式API

1. ref
ref是一个函数,接受一个简单类型或者复杂类型的传入并返回一个响应式且可变的 ref 对象,在函数中使用需要通过.value 访问,模板中使用不需要加.value
2. reactive
reactive是一个函数,接收一个普通的对象传入,不支持简单类型,把对象数据转化为响应式对象并返回
3. computed
根据现有响应式数据经过一定的计算得到全新的数据,只有在相关响应式依赖发生变化时才会重新计算。当一个值是基于其他状态计算得出的时候,最好使用计算属性。
4. watch
基于响应式数据的变化执行回调逻辑,当需要在数据变化时执行异步操作、操作 DOM,或者需要执行一些较复杂的逻辑时,最好使用 Watch 函数。

2.3 组件通信

在Vue 3中,父子组件之间的通信可以通过props传递数据到子组件,并通过$emit触发事件从子组件发送信息到父组件。为了更好的类型安全和开发体验,Vue 3提供了definePropsdefineEmits这两个Composition API来替代选项API中的propsthis.$emit

defineProps

  1. 参数:接受一个对象,对象中包含组件的属性及其类型、默认值等信息。
  2. 类型检查:使用 “defineProps” 可以确保组件的属性满足预期的类型要求,并提供了更好的类型检查功能。
  3. 默认值:可以在定义属性时指定默认值,如果父组件未提供相应的属性,则会使用默认值。

defineEmits

  1. 参数:接受一个数组,数组中包含组件可以触发的自定义事件名称。

  2. 类型推断:使用 “defineEmits” 后,编辑器可以正确地推断出组件可以触发的事件,从而提供更好的代码补全和类型检查。

  3. 组件定义中的用法:在组件定义对象中,可以通过 “emits” 属性将 “defineEmits” 返回的值传递给组件,从而指定该组件可以触发的自定义事件。

<script setup>
import { defineProps, defineEmits } from 'vue';
const props = defineProps({message: String
});
const emit = defineEmits(['child-event']);
const emitToParent = () => {emit('child-event', 'Data from child');
};
</script>

3. 项目功能模块设计以及页面展示

1. 首页模块

  • 轮播图:展示热门商品、促销活动等信息。
  • 商品分类导航:按照商品类型或者品牌分类展示,方便用户浏览。
  • 推荐商品:基于用户历史浏览记录或热门商品进行推荐。

2. 商品列表模块

  • 商品筛选:按照价格、品牌、类型等条件进行筛选。
  • 商品排序:按照价格、销量等进行排序。
  • 商品展示:展示商品的图片、名称、价格等信息,支持分页加载。

3. 商品详情模块

  • 商品信息展示:展示商品的详细信息,包括价格、描述、规格等。
  • 商品图片浏览:支持放大、缩小、切换图片等操作。
  • 商品评价:展示用户对商品的评价,并提供评分、评论内容等信息。

4. 购物车模块

  • 添加商品:支持用户将商品加入购物车。
  • 修改数量:用户可以修改购物车中商品的数量。
  • 删除商品:用户可以删除购物车中的商品。
  • 结算功能:跳转至结算页面进行支付。

5. 订单模块

  • 订单列表:展示用户的历史订单信息。
  • 订单详情:展示订单的详细信息,包括商品清单、价格、配送信息等。
  • 订单状态:实时更新订单状态,如待支付、待发货、已完成等。

6. 用户模块

  • 用户注册/登录:用户可以注册新账号或登录已有账号。
  • 个人信息管理:用户可以修改个人资料、密码等信息。
  • 收货地址管理:用户可以添加、修改、删除收货地址。
  • 订单管理:用户可以查看订单、申请退款等。

7. 支付模块

  • 选择支付方式:支持多种支付方式,如支付宝、微信支付、银行卡支付等。
  • 支付流程:用户进入支付页面,填写支付信息完成支付流程。

8. 搜索模块

  • 关键词搜索:用户可以通过关键词搜索商品。
  • 搜索历史:记录用户的搜索历史,方便用户再次搜索。
  • 搜索结果展示:展示搜索结果,支持分页加载和筛选。

1.jpg
2.jpg
3.jpg
4.jpg
5.jpg

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

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

相关文章

C++对象的拷贝构造函数

如果一个构造函数的第一个参数是类本身的引用,且没有其它参数(或者其它的参数都有默认值),则该构造函数为拷贝构造函数。 拷贝(复制)构造函数:利用同类对象构造一个新的对象 ●1.函数名和类同名 (构造函数) ●2.没有返回值 (构造函数) ●3.第一个参数必…

软考中级-软件设计师(九)数据库技术基础 考点最精简

一、基本概念 1.1数据库与数据库系统 数据&#xff1a;是数据库中存储的基本对象&#xff0c;是描述事物的符号记录 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;是长期存储在计算机内、有组织、可共享的大量数据集合 数据库系统&#xff08;DataBas…

【C++】模拟实现string

文章目录 前言成员变量成员函数构造函数拷贝构造函数浅拷贝深拷贝拷贝构造函数实现 析构函数赋值重载 空间管理函数元素访问元素修改字符串运算流提取 & 流插入流提取流插入 迭代器begin & endrbegin & rend 总结 前言 模拟实现不是为了写得和库里面一样好。而是为…

OmniReader Pro mac激活版:智慧阅读新选择,开启高效学习之旅

在追求知识的道路上&#xff0c;一款优秀的阅读工具是不可或缺的。OmniReader Pro作为智慧阅读的新选择&#xff0c;以其独特的功能和卓越的性能&#xff0c;为您开启高效学习之旅。 OmniReader Pro具备高效的文本识别和处理技术&#xff0c;能够快速准确地提取文档中的关键信息…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮&#xff0c;鼠标放在按钮上可以弹性拉出的三个按钮&#xff0c;使用贝塞尔曲线实现&#xff0c;项目demo显示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

Day 43 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

最后一块石头重量Ⅱ 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#xff1a; 如果 x y&#xff0c;那么两…

Transformers中加载预训练模型的过程剖析

使用HuggingFace的Transformers库加载预训练模型来处理下游深度学习任务很是方便,然而加载预训练模型的方法多种多样且过程比较隐蔽,这在一定程度上会给人带来困惑。因此,本篇文章主要讲一下使用不同方法加载本地预训练模型的区别、加载预训练模型及其配置的过程,藉此做个记…

【go项目01_学习记录10】

操作数据库 1 插入数据2 显示文章2.1 修改 articlesShowHandler() 函数2.2 代码解析 3 编辑文章3.1 添加路由3.2 编辑articlesEditHandler()3.3 新建 edit 模板3.4 代码重构3.5 完善articlesUpdateHandler()3.6 测试更新3.7 封装表单验证 1 插入数据 . . . func articlesStore…

厚德提问大佬答4:AI绘画生成的心得

遇到难题不要怕&#xff01;厚德提问大佬答&#xff01; 厚德提问大佬答 你是否对AI绘画感兴趣却无从下手&#xff1f;是否有很多疑问却苦于没有大佬解答带你飞&#xff1f;从此刻开始这些问题都将迎刃而解&#xff01;你感兴趣的话题&#xff0c;厚德云替你问&#xff0c;你解…

车载电子电器架构 —— 应用软件开发(中)

车载电子电器架构 —— 应用软件开发(中) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 &#xff08;1&#xff09;熟悉贪心法的设计思想 &#xff08;2&#xff09;理解贪心法的最优解与正确性证明之间的关系 &#xff08;3&#xff09;比较活动选择的各种“贪心”策略&#xff0c;…

动态IP避坑指南:如何挑选合适的动态代理IP?

在如今的网络环境中&#xff0c;使用动态IP代理成为实现隐私保护、访问受限内容和提高网络效率的一种常见方式&#xff0c;选择合适的国外动态IP代理可以让我们的业务处理事半功倍。面对市面上琳琅满目的选择&#xff0c;如何挑选购买适合自己的动态IP代理服务呢&#xff1f;在…

【数据结构】手把手带你玩转线性表

前言&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我…

弱监督语义分割-对CAM的生成过程进行改进1

一、仿射变换图像结合正则项优化CAM生成 论文&#xff1a;Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation &#xff08;CVPR,2020&#xff09; 1.SEAM方法 孪生网络架构&#xff08;Siamese Network Architecture&#xff09…

2024.5.10

TCP服务器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口大小和窗口大小固定this->resize(727,879);this->setFixedSize(727,879);//创建…

STC8增强型单片机开发【定时器Timer⭐】

目录 一、引言 二、定时器基础知识 三、STC8定时器配置 四、代码示例 五、总结 一、引言 在单片机开发中&#xff0c;定时器&#xff08;Timer&#xff09;是一个极其重要的组件&#xff0c;它允许开发者基于时间触发各种事件或任务。STC8增强型单片机作为一款功能丰富的…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

c++opencv Project3 - License Plate Detector

俄罗斯车牌识别案例&#xff1a;实时识别车牌&#xff0c;并且读取到指定文件夹中。 惯例先展示结果图&#xff1a; 对于摄像头读取图片进行车牌匹配&#xff0c;原理和人脸识别其实是一致的。 利用训练好的模型进行匹配即可。可参考&#xff1a; 对视频实现人脸识别-CSDN博…

电能表远程抄表系统是什么?

电能表远程抄表系统是一种优秀的电力管理方法&#xff0c;它通过自动化的形式搜集、解决与分析电能表的信息&#xff0c;进而取代了传统人工抄水表方法。其主要原理是运用物联网技术、通讯技术和大数据处理技术&#xff0c;完成对电度表数据信息实时、远程控制获取和管理方法。…

探索无界知识:用 ChatGPT 的原理学习任何事物!

为避免文章重复&#xff0c;您的文本已通过更改句式、用词以及句子结构进行了修改。现在的文本应该能更好地满足去重的需求&#xff1a; 从ChatGPT原理出发&#xff0c;我们探讨GPT如何启发人类学习和构建个人知识体系。 1. 明确学习目标 机器学习必须依靠目标函数。同样&…