vue2项目(一)
项目介绍
电商前台项目
技术架构:vue+webpack+vuex+vue-router+axios+less..
- 封装通用组件
- 登录注册
- token
- 购物车
- 支付
- 项目性能优化
一、项目初始化
使用vue create projrct_vue2在命令行窗口创建项目

1.1、脚手架目录介绍
├── node_modules:放置项目的依赖
├── public:一般放置的是静态资源(图片),需要注意:放在public文件夹中的静态资源,webpack进行打包的时候,会原封不动打包到dist文件夹中,不会当做一个模块打包到 JS 里面
│ ├── favicon.ico: 页签图标
│ └── index.html: 主页面
├── src:程序员源代码文件夹
│ ├── assets: 存放静态资源(一般放置多个组件公用的的静态资源),需要注意:放置在assets文件夹里面的资源,webpack打包的时候,会把静态资源当做一个模块,打包到JS文件里面
│ │ └── logo.png
│ │── component: 存放组件【一般放置的是非路由组件(全局组件)】
│ │ └── HelloWorld.vue
│ │── App.vue: 汇总所有组件(唯一的根组件,Vue当中的组件都是(.vue))
│ │── main.js: 入口文件(程序的入口文件,也是整个程序当中最先执行的文件)
├── .gitignore: git版本管制忽略的配置
├── babel.config.js: babel的配置文件
├── package.json: 应用包配置文件(记录着项目信息,叫什么…有哪些依赖…项目怎么运行…)
├── README.md: 应用描述文件,说明性文件
├── package-lock.json:包版本控制文件,缓存性文件
1.2、项目的其他配置
2.1、项目运行起来的时候,让浏览器自动打开。【我不想把默认浏览器设置成Google,但是又想调整项目的时候使用Google浏览器,所以我选择手动打开,没有修改此处的文件】
找到package.json文件,找到"scripts"进行如下修改:

2.2、eslint语法校验功能关闭。
修改vue.config.js文件:

2.3、src文件夹简写方法,配置别名。【默认配置好了的】
在jsconfig.json文件中。@代表的是src文件夹,这样将来文件过多,找的时候方便很多。

二、项目的路由分析及搭建
2.1、项目的路由分析
本项目和品优购差不多,上中下结构的
前端所谓路由:key-value键值对
key:URL(地址栏中的路径)
value:相应的路由组件
非路由组件:
- Header
- Footer(首页,搜索页)
路由组件:
- 【Home首页】
- 【Search搜索】
- 【login登录(无Footer)】
- 【register注册(无Footer,可以通过条件渲染搞没)】
2.2、开发项目的步骤
- 书写静态页面(HTML,CSS)
- 拆分组件(路由/非路由)
- 获取服务器的数据动态展示
- 完成相应的动态业务逻辑
- 注意1:创建组件的时候,找准 组件结构 + 组件的样式 + 图片资源
- 注意2:项目如果采用的less样式,浏览器不识别less样式,需要通过less、less-loader【安装6版本】进行处理less:npm i less-loader@6,如果想要组件识别less样式,需要在style标签加上lang=“less”。
- 注意3:引入清除默认样式,将默认样式文件放在public文件夹内,在index.html里引入。 <link rel="stylesheet" href="<./css/reset.css">
2.3、非路由组件的搭建
非路由组件都搞在components文件夹里,本项目有Header和Footer
1、创建或定义组件
2、引入组件
3、注册组件
4、使用组件

2.4、路由组件的搭建
2.4.1、配置路由器
Vue2安装vue-router,命令:npm i vue-router@3
Vue3安装vue-router,命令:npm i vue-router
路由组件有四个:Home,Search,Login,Register(注册)
components文件夹:经常放置 非路由组件 (公用全局组件)
pages|views文件夹:经常放置 路由组件



2.4.2、使用路由组件
用<router-view></router-view>指定展示位置,然后登录,注册,搜索这几个a标签都换成router-link标签,href换成to



2.4.3、路由组件与非路由组件的区别
- 路由组件一般放置在pages | views文件夹,非路由组件一般放置在components文件夹中
- 路由组件一般需要在router文件夹中的index.js文件中配置路由规则(使用路径和组件名字等属性),非路由组件在使用的时候,一般都是以标签的形式使用
- 注册完路由,不管是路由组件还是非路由组件,身上都有 $route,$router属性
- $route:一般获取路由信息【路径,query,params等等】,其实非路由组件当中的this.$route就是当前显示的路由组件的一些信息,比如路径,name,meta等
- $router:一般进行编程式导航进行路由跳转【push | replace】
2.4.4、重定向
在项目跑起来的时候,访问/,立马让他定向到首页 写在 src/router/index.js文件里

2.4.5、路由跳转的两种方式
- 声明式导航router-link
- 编程式导航 push | replace
声明式路由导航可以做的事情 编程式导航都能做,除此之外,编程式导航还能做一些其他的业务



三、Footer组件的显示和隐藏--路由元信息
显示或隐藏组件:v-if | v-show
Footer组件在 Home,Search中是显示的,在Login和Register中是隐藏的
我们可以根据$route.path是否是home或search来控制Footer的显示与隐藏



若有很多组件都要显示Footer,就要写很多,这样不方便且冗余。
路由元信息 | Vue Router
定义路由的时候可以配置 meta 字段:



注意:配置的路由的时候,可以给路由添加路由元信息【meta】,路由需要配置对象,它的key不能瞎写、胡写、乱写
四、路由传参
params和query参数可以一起传
4.1、路由跳转的两种方式
声明式导航:router-link(务必要有to属性)
编程式导航:利用的是组件实例的$router.push | replace 方法(可以书写一些自己的业务)
4.2、路由传参,参数的写法
params参数:属于路径当中的一部分,需要注意,在配置路由的时候,需要占位
query参数:不属于路径当中的一部分,类似于ajax中的queryString /home?k=v&kv=,不需要占位
methods: {//搜索按钮的回调函数,需要向search路由进行跳转goSearch() {//路由传递参数//第一种:字符串形式//this.$router.push('/search/' + this.keyword + '?k=' + this.keyword.toUpperCase());//第二种传参方式:模板字符串//this.$router.push(`/search/${this.keyword}?k=${this.keyword.toUpperCase()}`);//第三种传参方式:对象写法this.$router.push({// path: '/search', 注意:此处和params一起时不能用path只能namename: 'search',params: { keyword: this.keyword },query: { k: this.keyword.toUpperCase() },})},},
注意:路由携带
params参数时,若使用to的对象写法,则不能使用path配置项,必须使用name配置!而且params需要去占位!
4.3、路由传参面试题
1、路由传递参数(对象写法) path是否可以结合params参数一起使用?
不可以。路由跳转传参的时候,对象的写法可以是name,path的形式,但需要注意的是,path这种写法不能与params参数一起使用
2、如何指定params参数可传可不传?
在配置路由的时候,给params占位 的后面加上?,代表可传递也可以不传递

例:配置路由的时候如果已经给params参数占位了但不写问号,那么路由跳转的时候不传递params参数,路径就会出现问题 。你跳转的本来是 http://localhost:8080/#/search/k=QWE 这个位置,结果你跳转的是 http://localhost:8080/#/k=QWE 这个位置,search路径直接没了
3、params参数可传递也可以不传递,但是如果传递是空串,如何解决?
若有占位符也有问号,但传递的是空串的话,路径也会有问题(和上面路径问题一样,search直接没了)。使用undefined解决:params参数可传递不可传递的时候,传递是空串路径有问题的错误
params:{keyWord:'' || undefined,},
4、路由组件能不能传递props数据?
可以的,有三种写法:对象式,布尔值,函数式

五、bug解决
编程式路由跳转到当前路由(参数不变),多次执行会抛出NavigationDuplicated的警告错误?
因为路由跳转有两种形式:声明式导航,编程式导航,其中声明式导航没有这类问题,因为vue-router底层已经处理好了
- 声明式导航router-link
- 编程式导航 push | replace
为什么编程式导航进行路由跳转的时候,就有这种警告错误?
1、"vue-router": "^3.6.5":最新的vue-router引入promise,push返回的是promise,promise有两个形参,成功返回的函数和失败返回的函数
通过push方法传递相应的成功,失败的回调函数,可以捕获到当前错误,可以解决
通过下面的代码可以实现解决错误
this.$router.push({// 第三种:对象写法name:'search',// params参数params:{keyWord:'' || undefined,},// query参数query:{k:this.keyWord.toUpperCase()}},()=>{},()=>{})
2、这种写法治标不治本,将来在别的组件当中 push | replace,编程式导航还是有类似错误
- this:当前组件实例(search)
- this.$router属性:当前的这个属性,属性值vueRouter类的一个实例,当在入口文件注册路由的时候,给组件实例添加$router|$route属性
- push:VueRouter类的一个实例
由于this是当前组件示例,$router是VueRouter的一个实例,它可以访问到VueRouter原型对象上的push,所以我们通过重写push方法, 就可以解决问题。

相关文章:
vue2项目(一)
项目介绍 电商前台项目 技术架构:vuewebpackvuexvue-routeraxiosless.. 封装通用组件登录注册token购物车支付项目性能优化 一、项目初始化 使用vue create projrct_vue2在命令行窗口创建项目 1.1、脚手架目录介绍 ├── node_modules:放置项目的依赖 ├──…...
【Leetcode 热题 100】64. 最小路径和
问题背景 给定一个包含非负整数的 m n m \times n mn 网格 g r i d grid grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 数据约束 m g r i d . l e n g t h m grid.lengt…...
[LeetCode]day9 203.移除链表元素
203. 移除链表元素 - 力扣(LeetCode) 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], v…...
Recommender Systems with Large Models
一、引言 信息爆炸时代,用户面临信息过载,传统推荐系统依赖经典算法,难以满足需求。大模型基于深度学习,经大规模预训练,具备强大能力,能实现更精准推荐,为推荐系统发展开辟新路径。 二、大模…...
TOF技术原理和静噪对策
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、什么是TOF TOF 是Time of Flight的缩写,它是一种通过利用照射波和反射波之间的时间差来测量到物体的距离的测…...
MongoDB常见的运维工具总结介绍
MongoDB 提供了一些强大的运维工具,帮助管理员进行数据库监控、备份、恢复、性能优化等操作。以下是一些常见的 MongoDB 运维工具及其功能介绍: 1. MongoDB Atlas 功能:MongoDB Atlas 是 MongoDB 官方的云托管数据库服务,它提供…...
B-树:解锁大数据存储和与快速存储的密码
在我们学习数据结构的过程中,我们会学习到二叉搜索树、二叉平衡树、红黑树。 这些无一例外,是以一个二叉树展开的,那么对于我们寻找其中存在树中的数据,这个也是一个不错的方法。 但是,如若是遇到了非常大的数据容量…...
园区智能化系统实现管理与服务的智能化转型与创新进阶
内容概要 园区智能化系统的出现,标志着管理与服务向智能化转型的重要一步。这一系统不仅仅是一个技术解决方案,更是一个全面提升园区运营效率与安全性的独特工具。通过集成大数据分析、物联网和人工智能,园区智能化系统能够为各类园区如工业…...
【Java异步编程】CompletableFuture实现:异步任务的串行执行
文章目录 一. thenApply():转换计算结果1. 一个线程中执行或多个线程中执行2. 使用场景说明 二. thenRun():执行无返回值的操作1. 语法说明2. 使用场景说明 三. thenAccept():消费计算结果1. 语法说明a. 前后任务是否在一个线程中执行b. 要点…...
工业相机如何获得更好的图像色彩
如何获得更好的图像色彩 大部分的工业自动化检测中对物体的色彩信息并不敏感,因此会使用黑白的相机,但是在显微镜成像、颜色分类识别等领域,相机的色彩还原就显得格外重要,在调节相机色彩方面的参数时,有以下几个方面需…...
Python获取能唯一确定一棵给定的树的最少数量的拓扑序列
称一个 1 1 1~ n n n的排列 { p } { p 1 , p 2 , ⋯ , p n } \{p\}\{p_1,p_2,\cdots,p_n\} {p}{p1,p2,⋯,pn}是一棵n个点、点编号为 1 1 1至 n n n的树 T T T的拓扑序列,当且仅对于任意 1 ≤ i < n 1\leq i<n 1≤i<n,恰好存在唯一的 j &…...
PyTorch中的movedim、transpose与permute
在PyTorch中,movedim、transpose 和 permute这三个操作都可以用来重新排列张量(tensor)的维度,它们功能相似却又有所不同。 movedim 🔗 torch.movedim 用途:将张量的一个或多个维度移动到新的位置。参数&…...
C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?
匿名方法本质上是一种没有显式名称的方法,它可以作为参数传递给需要委托类型的方法,常用于事件处理、回调函数等场景,能够让代码更加简洁和紧凑。 使用场景 事件处理:在处理事件时,不需要为每个事件处理程序单独定义…...
四、jQuery笔记
(一)jQuery概述 jQuery本身是js的一个轻量级的库,封装了一个对象jQuery,jquery的所有语法都在jQuery对象中 浏览器不认识jquery,只渲染html、css和js代码,需要先导入jQuery文件,官网下载即可 jQuery中文说明文档:https://hemin.cn/jq/ (二)jQuery要点 1、jQuery对象 …...
SQL进阶实战技巧:如何构建用户行为转移概率矩阵,深入洞察会话内活动流转?
目录 1 场景描述 1.1 用户行为转移概率矩阵概念 1.2 用户行为转移概率矩阵构建方法 (1) 数据收集...
TCP/IP 协议:互联网通信的基石
TCP/IP 协议:互联网通信的基石 引言 TCP/IP协议,全称为传输控制协议/互联网协议,是互联网上应用最为广泛的通信协议。它定义了数据如何在网络上传输,是构建现代互联网的基础。本文将深入探讨TCP/IP协议的原理、结构、应用以及其在互联网通信中的重要性。 TCP/IP 协议概述…...
第25节课:前端缓存策略—提升网页性能与用户体验
目录 前端缓存的重要性HTTP缓存HTTP缓存的基本原理常见的HTTP缓存头Cache-ControlExpiresETagLast-Modified HTTP缓存的类型强缓存协商缓存 服务端渲染与SSR服务端渲染(SSR)简介SSR的优势SSR的挑战实践:使用SSR框架构建Web应用Next.js安装Nex…...
完美世界C++游戏开发面试题及参考答案
堆栈数据结构有什么区别,举例说明 栈(Stack)和堆(Heap)是两种不同的数据结构,它们在多个方面存在显著区别: 存储方式 栈:栈是一种后进先出(LIFO)的数据结构,它的存储空间是连续的。栈由系统自动分配和释放,用于存储函数调用时的局部变量、函数参数、返回地址等信息…...
LabVIEW无人机航线控制系统
介绍了一种无人机航线控制系统,该系统利用LabVIEW软件与MPU6050九轴传感器相结合,实现无人机飞行高度、速度、俯仰角和滚动角的实时监控。系统通过虚拟仪器技术,有效实现了数据的采集、处理及回放,极大提高了无人机航线的控制精度…...
AtCoder Beginner Contest 391(ABCDE)
A - Lucky Direction 翻译: 给你一个字符串 D,代表八个方向(北、东、西、南、东北、西北、东南、西南)之一。方向与其代表字符串之间的对应关系如下。 北: N东: E西: W南: S东…...
MINIRAG: TOWARDS EXTREMELY SIMPLE RETRIEVAL-AUGMENTED GENERATION论文翻译
感谢阅读 注意不含评估以后的翻译原论文地址标题以及摘要介绍部分MiniRAG 框架2.1 HETEROGENEOUS GRAPH INDEXING WITH SMALL LANGUAGE MODELS2.2 LIGHTWEIGHT GRAPH-BASED KNOWLEDGE RETRIEVAL2.2.1 QUERY SEMANTIC MAPPING2.2.2 TOPOLOGY-ENHANCED GRAPH RETRIEVAL 注意不含评…...
HTB:LinkVortex[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用gobuster对靶机进行路径FUZZ 使用ffuf堆靶机…...
3D图形学与可视化大屏:什么是材质属性,有什么作用?
一、颜色属性 漫反射颜色 漫反射颜色决定了物体表面对入射光进行漫反射后的颜色。当光线照射到物体表面时,一部分光被均匀地向各个方向散射,形成漫反射。漫反射颜色的选择会直接影响物体在光照下的外观。例如,一个红色的漫反射颜色会使物体在…...
什么是门控循环单元?
一、概念 门控循环单元(Gated Recurrent Unit,GRU)是一种改进的循环神经网络(RNN),由Cho等人在2014年提出。GRU是LSTM的简化版本,通过减少门的数量和简化结构,保留了LSTM的长时间依赖…...
基于微信小程序的酒店管理系统设计与实现(源码+数据库+文档)
酒店管理小程序目录 目录 基于微信小程序的酒店管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1) 用户信息管理 (2) 酒店管理员管理 (3) 房间信息管理 2、小程序序会员模块的实现 (1)系统首页 ÿ…...
Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具
前言:日常生活中,我们常常会跟WPS Office打交道。作表格,写报告,写PPT......可以说,我们的生活已经离不开WPS Office了。与此同时,我们在这个过程中也会遇到各种各样的技术阻碍,例如部分软件的PDF转Word需要收取额外费用等。那么,可不可以自己开发一个小工具来实现PDF转…...
Java-数据结构-优先级队列(堆)
一、优先级队列 ① 什么是优先级队列? 在此之前,我们已经学习过了"队列"的相关知识,我们知道"队列"是一种"先进先出"的数据结构,我们还学习过"栈",是"后进先出"的…...
爬虫基础(四)线程 和 进程 及相关知识点
目录 一、线程和进程 (1)进程 (2)线程 (3)区别 二、串行、并发、并行 (1)串行 (2)并行 (3)并发 三、爬虫中的线程和进程 &am…...
C语言初阶力扣刷题——349. 两个数组的交集【难度:简单】
1. 题目描述 力扣在线OJ题目 给定两个数组,编写一个函数来计算它们的交集。 示例: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 输入:nums1 [4,9,5], nums2 [9,4,9,8,4] 输出:[9,4] 2. 思路 直接暴力…...
Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)
一、Tailwind CSS 概述 Tailwind CSS 是一个功能优先的 CSS 框架,它提供了大量的实用类(utility classes),允许开发者通过组合这些类来快速构建用户界面 Tailwind CSS 与传统的 CSS 框架不同(例如,Bootstr…...




