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、开发项目的步骤

  1. 书写静态页面(HTML,CSS)
  2. 拆分组件(路由/非路由)
  3. 获取服务器的数据动态展示
  4. 完成相应的动态业务逻辑
  • 注意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、路由跳转的两种方式

  1. 声明式导航router-link
  2. 编程式导航 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底层已经处理好了

  1. 声明式导航router-link
  2. 编程式导航 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方法, 就可以解决问题。

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

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

相关文章

分层多维度应急管理系统的设计

一、系统总体架构设计 1. 六层体系架构 #mermaid-svg-QOXtM1MnbrwUopPb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QOXtM1MnbrwUopPb .error-icon{fill:#552222;}#mermaid-svg-QOXtM1MnbrwUopPb .error-text{f…

350.两个数组的交集 ②

目录 题目过程解法 题目 给你两个整数数组 nums1 和 nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现次数不一致&#xff0c;则考虑取较小值&#xff09;。可以不考虑…

sublime_text的快捷键

sublime_text的快捷键 向下复制, 复制光标所在整行并插入到下一行&#xff1a;通过 CtrlShiftD 实现快速复制当前行的功能。 可选多行, 不选则复制当前行 ctrl Shift D 删除当前行&#xff1a;通过 CtrlShiftK 实现快速删除当前行的功能。 可选多行, 不选则删当前行 ctrl S…

[ACTF2020 新生赛]BackupFile1

题目 翻译&#xff0c;尝试找出源文件&#xff01; 扫目录使用参数-e * python dirsearch.py -u http://0c3b21c0-d360-4baa-8b97-aa244f4c4825.node5.buuoj.cn:81/ -e * 最终扫描到一个文件名为&#xff1a;/index.php.bak的文件&#xff0c;把备份文件下载下来 源码 <?…

OPENPPP2 —— VMUX_NET 多路复用原理剖析

在阅读本文之前&#xff0c;必先了解以下几个概念&#xff1a; 1、MUX&#xff08;Multiplexer&#xff09;&#xff1a;合并多个信号到单一通道。 2、DEMUX&#xff08;Demultiplexer&#xff09;&#xff1a;从单一通道分离出多个信号。 3、单一通道&#xff0c;可汇聚多个…

DeepSeek-R1大模型本地部署及简单测试

目录 DeepSeek-R1大模型本地部署及简单测试背景我的测试环境模型参数选择适用场景参数规模 本地部署安装 DeepSeek-R1大模型本地部署及简单测试 背景 最近deepseek非常火, 要说2025年震惊科技圈的事件要数DeepSeek这个国产AI的横空出世&#xff0c;这是一款免费、开源且隐私优…

C# 数组和列表的基本知识及 LINQ 查询

数组和列表的基本知识及 LINQ 查询 一、基本知识二、引用命名空间声明三、数组3.1、一维数组3.2、二维数组3.3、不规则数组 Jagged Array 四、列表 List4.1、一维列表4.2、二维列表 五、数组和列表使用 LINQ的操作和运算5.1、一维 LIST 删除所有含 double.NaN 的行5.2、一维 LI…

C++计算给定序列在多次修改前后满足特定条件的极大匹配方案的大小

给定长度为n的整数序列 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1​,a2​,...,an​和长度为n的01序列 b 1 , b 2 , . . . , b n b_1,b_2,...,b_n b1​,b2​,...,bn​。 对于 1 ≤ i < j ≤ n 1\leq i<j\leq n 1≤i<j≤n&#xff0c;称二元组 ( i , j ) (i,j) (i,j)…

强化学习笔记(3)——基于值函数的方法和策略梯度方法

分为两大类方法&#xff1a; 基于值函数的方法&#xff08;Temporal Difference Methods, TD Methods&#xff09; 策略梯度方法&#xff08;Policy Gradient Methods&#xff09;。 二者不同之处&#xff1a; 通过值函数来间接表达隐式的策略&#xff0c;一个是直接迭代优化策…

柱量最大值转向

• 在MACD指标中&#xff0c;柱状线在0轴之上时用红色柱线表示&#xff0c;简称为“红柱”。 • 在上涨过程中&#xff0c;柱状线会在0轴之上不断向上发散&#xff0c;这是由于快线DIF带动慢线DEA向上运行&#xff0c;并且DIF不断远离DEA。 2. 上涨动能的变化&#xff1a;…

Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)

本文讲如何在Excel中用切片器做出查询效果。 目录 1&#xff0c;在Excel中用切片器做出查询效果 1-1&#xff0c;Excel 中的切片器是什么&#xff1f; 1-2&#xff0c;用切片器做出查询效果 1&#xff09;&#xff0c;点击任一表格内单元格&#xff0c;按下CtrlA&#xff0…

Java 性能优化与新特性

Java学习资料 Java学习资料 Java学习资料 一、引言 Java 作为一门广泛应用于企业级开发、移动应用、大数据等多个领域的编程语言&#xff0c;其性能和特性一直是开发者关注的重点。随着软件系统的规模和复杂度不断增加&#xff0c;对 Java 程序性能的要求也越来越高。同时&a…

01.04、回文排序

01.04、[简单] 回文排序 1、题目描述 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。 2、解题思路 回文串的特点&#xff1a; 一个回文串在…

leetcode——排序链表(java)

给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&#xff1a; …

python开发,最好的环境是什么

目录 1. 集成开发环境&#xff08;IDE&#xff09; 1.1 PyCharm 1.2 Visual Studio Code (VSCode) 2. 文本编辑器 2.1 Sublime Text 2.2 Vim/NeoVim 3. 虚拟环境管理 4. 版本控制与协作 5. 容器化开发 6. 项目管理与依赖管理工具 7. 单元测试与调试 最佳组合推荐 …

苯乙醇苷类化合物的从头生物合成-文献精读108

Complete pathway elucidation of echinacoside in Cistanche tubulosa and de novo biosynthesis of phenylethanoid glycosides 管花肉苁蓉中松果菊苷全生物合成途径解析及苯乙醇苷类化合物的从头生物合成 摘要 松果菊苷&#xff08;ECH&#xff09;是最具代表性的苯乙醇苷…

AnyThingLLM本地私有知识库搭建

***************************************************** 环境准备 操作系统&#xff1a;Windows11 内存&#xff1a;32GB RAM 存储&#xff1a;预留 300GB 可用空间 显存: 16G 网络: 100M带宽 前置准备: 已安装ollama环境 deepseek本地大模型 ***************************…

【设计测试用例自动化测试性能测试 实战篇】

&#x1f308;个人主页&#xff1a;努力学编程’ ⛅个人推荐&#xff1a; c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构&#xff0c;刷题刻不容缓&#xff1a;点击一起刷题 &#x1f319;心灵鸡汤&#xff1a;总有人要赢&#xff0c;为什么不能是我呢 设计测试用例…

幸运数字——蓝桥杯

1.问题描述 哈沙德数是指在某个固定的进位制当中&#xff0c;可以被各位数字之和整除的正整数。例如 126126 是十进制下的一个哈沙德数&#xff0c;因为 (126)10mod(126)0&#xff1b;126 也是八进制下的哈沙德数&#xff0c;因为 (126)10(176)8&#xff0c;(126)10​mod(176)…

动态规划DP 最长上升子序列模型 拦截导弹(题目分析+C++完整代码)

概览检索 动态规划DP 最长上升子序列模型 拦截导弹 原题链接 AcWiing 1010. 拦截导弹 题目描述 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每…