vue电商项目(三)——开发search页面

2023-11-15

目录

一、页面分析

二、获取数据到组件

1、获取数据

2、通过仓库getter简化数据

3、根据参数返回数据

(1)将请求封装成一个方法

(2)准备一个响应式数据

4、在发送请求之前准备好数据

​三、渲染组件内容

1、完成子组件searchSelacter

2、通过监听路由从而更新数据

3、完成面包屑

(1)分类面包屑

(2)关键字面包屑

(3)品牌面包屑

(4)平台售卖属性面包屑

4、排序操作

(1)谁有类名

(2)箭头业务

(3)控制数据变化

5、完成分页器


因为静态组件已经是写好的,所以直接将给的资源中复制替换页面的静态组件即可。

一、页面分析

该页面一共被分为一下几个部分

1、面包屑(带小x号的部分)

2、searchSelacter子组件

3、详情部分,就是综合到价格部分

4、good-List商品展示,展示的所有商品

5、分页器

二、获取数据到组件

1、获取数据

 准备API,这里api是post,且需要带参数,至少是一个空对象

 在search仓库中进行三连环

2、通过仓库getter简化数据

1、getter中函数的第一个形参可以拿到当前小仓库的state。

2、通过mapGetters获取数据的时候因为getter并没有分开,所以在计算属性中就不需要写成对象的形式,而是直接结构赋值即可。

3、为了防止没网的时候,所以至少要返回一个空数组

3、根据参数返回数据

(1)将请求封装成一个方法

因为参数不同,返回的结果不同,所以我们要根据参数发多次请求获取参数。所以我们将发送请求封装成一个方法,所以之前组件挂载直接调用函数getData()即可。

(2)准备一个响应式数据

以后会根据不同的情况改变数据内容,从而返回不同的内容

4、在发送请求之前准备好数据

要在发送请求之前整理好数据,所以我们可以在beforeMounted中整理参数

Object.assign(a,b,c)b和c会将a相同属性名的替换属性值替换掉

三、渲染组件内容

1、完成子组件searchSelacter

因为数据已经获取存放在仓库中了,且通过getters简化过了,所以直接获取到组件,然后根据v-for进行遍历就可以了。

2、通过监听路由从而更新数据

注意!每次发完请求都要清空一二三级目录ID,因为第二次可能只选择了一或二级ID,这就导致了三级目录ID没有被重置,所以每次发完请求我们都要重置ID.

关键字不用重置是因为关键是双向绑定,每次输入都会被重置,且只有一个值

3、完成面包屑

(1)分类面包屑

面包屑是否显示应该是判断是否有catergoryName,所以我们通过v-show来进行控制。同时点击x号,时候应该让categoryName置空。

在重新发送请求的时候我们发现路由地址并没有发生变化,所以我们通过路由跳转自己进行解决,同时我们发现params参数也一并没有了,我们的本意是先只是清楚query参数,所以跳转的时候进行判断,如果有params要一起带上。

老师添加了一个判断是否有params参数的判断条件,我觉得没有必要,因为如果params参数没有,那么路由就重置不了,所以我们就不设置判断条件了。

(2)关键字面包屑

1、同样的方法判断关键字是否存在,然后重新发送请求即可。

2、清除文本框【但是这里有一个问题就是发送完请求之后我们需要将搜索框里面的内容置空,这里涉及到了兄弟间通信,这里使用全局事件总线。】

注册全局事件总线

使用全局事件总线

这里也需要带上query的参数不能丢,所以在触发全局事件的后面加上

this.$router.push({name:"search",query:this.$route.query})

(3)品牌面包屑

1、在子组件中触发函数,需要将当前品牌给父组件,在父组件中重新整理数据,然后向服务器获取数据,这里涉及了到父子组件同行,所以我们使自定义事件来时实现。

这里提前在父组件准备好自定事件回调

 将自定义事件传递给子组件,并且点击品牌触发事件回调,传递回来需要的数据

点击品牌上面的小x号,也是可以清楚数据和发送请求的,和上面一样的操作

对应的方法

(4)平台售卖属性面包屑

给售卖属性绑定点击事件,和上面一样,也是父子组件传值,也是绑定自定义事件

同时在父组件中设置自定义事件回调,

 对应回调

同样要给x设置删除的点击事件,但是这里的事件在触发的时候需要传递当前的index值,否则我们就不知道该删除谁了。且这里有可能属性点击了多个属性值,所以这里应该用v-for,

 对应回调

4、排序操作

排序操作:1: 综合,2: 价格 asc: 升序,desc: 降序  

示例: "1:desc",总共可能出现四种情况。1升序降序,2升序降序。

(1)谁有类名

通过判断searchParams中的order参数中是1还是2,如果是1,则是综合有类名,如果是2则是价格有类名。

(2)箭头业务

谁有箭头,判断条件和上面的谁有类名是一样的,但是这里的箭头我们使用阿里巴巴矢量图来制作。

阿里巴巴矢量图的使用

第一步选择好需要的矢量图,加入购物车。

第二步点击在线链接,在public文件夹的静态页面中引引入css样式

注意!给的链接中没有https:需要自己添加上去

第三 在需要使用箭头的标签上写上两个类名,class:'iconfont' class="复制上面需要的样式进行选择"

选择上或者下则和上面判断类名相似,这里是通过判断searchParams中是含有desc还是asc来进行判断的。

(3)控制数据变化

前面的类名、图标是上是下都是基于searchParams中的数据进行判断的,所以这里用于点击,让数据进行变化就即为重要了。

业务分析:默认综合降序

用户点击综合:由价格变为综合,或者是又原来的降序变为升序

用户点击价格:由综合变为价格,再次点击降序变升序

5、完成分页器

鉴于第一次使用老师说的自己写分页器,我们发现其中的代码会报错,且无法运行,这一次我使用element Ui解决这个问题

1、安装elemnet Ui:

npm i element-ui -S

2、我们这里采用按需引入

需要在babel.config.js中配置如下代码

 "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]

还需要安装:

npm install babel-plugin-component -D

3、引入样式和组件并且使用

4、在search组件中复制对应的css样式和配置对应的函数

配置对应的函数

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue电商项目(三)——开发search页面 的相关文章

  • 在javascript中使用“return !0”有什么意义吗?

    如果您转到谷歌结果页面并运行rwt toString 你会看到这个函数的返回调用是 return 0 我想不出任何理由为什么这不会总是如此true 这只是一个简写吗true 还是还有更多事情发生 总是如此 但下载需要 2 个字节 0是 2
  • 检查 DOM 元素是否为复选框

    如何检查给定的 DOM 元素是否为复选框 设想 我有一组文本框和复选框 其中的值是动态分配的 我没有办法识别 DOM 元素是复选框还是文本框 只使用普通的 javascript 你就可以做到 if el type el type check
  • Google 饼图未显示所有数据行

    我正在尝试绘制人口与国家名称的关系图 我发现 Google 可视化库仅渲染前几个 实际上数字似乎是随机的 具体取决于我使用的数据 有时添加 其他 条目 但它没有t 实际上具有其余条目的值 Example 1 With all countri
  • 零作为 IIFE 中的第一个参数[重复]

    这个问题在这里已经有答案了 In babeljs v6 5 1 class Foo 编译为 use strict var classCallCheck2 require babel runtime helpers classCallChec
  • 使用 NodeJS 让 Discord 机器人发送带有消息的图片

    我有几张照片 全部在 imgur 上 带有直接图像链接 格式 https i imgur com XXXXXX jpg https i imgur com XXXXXX jpg 以及用 NodeJS 制作的 Discord 机器人 我发送这
  • ngModel.$parsers 忽略 ng-model 值末尾的空格

    我有这样的指令 directive noWhitespace parse function parse return restrict A require ngModel link function scope element attrs
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 是否可以覆盖 javaScript 原始数据类型?

    问题是不言自明的 我知道可以扩展原始数据类型 例如string但有可能覆盖它吗 这是在采访中被问到的一个问题 不 你不能覆盖任何东西 Ecma脚本定义原始类型 http es5 github com x4 3 2 Undefined Nul
  • 在 Angular2 项目中集成 Treant-js

    我正在尝试在 Angular2 项目中使用 treant js 但我正在努力解决如何正确集成它的问题 我有一个工作正常的 JavaScript HTML 示例 我正在尝试在 Angular2 中工作 我创建了一个组件 从 npm 添加了 t
  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • 使用 Javascript / Jquery 的本地存储(不使用 HTML5)

    我想在 javascript 或 jquery 中复制本地存储概念 类似于 HTML5 但不幸的是我不知道如何开始 任何人都可以建议如何使用 javascript 或 jquery 实现本地存储 不使用 HTML5 这是一个有点愚蠢的差事
  • 专用网络:web3.eth.getAccounts() 始终发送空数组

    我正在运行一个私人以太坊网络 我确实用https aws amazon com blockchain templates 整个设置已经完成 AWS 上的设置看起来正确 现在 我正在尝试创建帐户并检索所有这些帐户 为此 我使用以下方法 Web
  • ReactJS:从没有 onChange 事件的 props 中选择默认值?

    所以 我只是想知道我是否绝对需要在 React 中的选择组件上有一个 onChange 事件处理程序 我有一个道具传递我想要选择的选项的默认值 如果我有的话 它就没有问题
  • 空 URL 哈希导致页面在 js 事件上跳转

    我有一个带有下一个和上一个按钮的照片库 如果我的某个 javascript 方法由于某种原因被破坏 那么当单击其中一个按钮时 它会向 url 添加一个哈希值 即 www google com 我知道可以给散列一个 div id 来跳转到页面
  • Window 与 Var 声明变量[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • Javascript 选择 onchange='this.form.submit()'

    我有一个带有选择和一些文本输入的表单 我希望在更改选择时提交表单 使用以下方法可以正常工作 onchange this form submit 但是 如果表单还包含提交按钮 则当选择更改时 表单不会提交 我猜有某种冲突 我在这里有什么选择
  • 使用Promise而不拒绝它会导致内存泄漏吗? [复制]

    这个问题在这里已经有答案了 代码如下 function test value return new Promise function fulfill reject try fulfill true catch e throw e 我担心的是
  • 使用 Lodash 的 TypeScript:_.map(["123", " 234 "], _.trim) 返回 boolean[]?

    我有一个字符串数组 它们已像这样分割 var searchValue 600 800 123 180 var groups searchValue split gt 600 800 123 180 因此项目周围可能存在空格 并且我想删除空格
  • ThreeJS无法加载Json文件

    首先 我已经读过这个问题 https stackoverflow com questions 17201888 three js exporter export object not working with jsonloader r58没
  • 在 Google Apps 脚本中的文本前插入换行符

    我需要在 Google 文档中的某些文本之前插入一些换行符 尝试过这种方法但出现错误 var body DocumentApp getActiveDocument getBody var pattern WORD 1 var found b

随机推荐

  • 线性表 :顺序表(ArrayList) 和 单链表(LinkedList) 详解

    线性表 1 顺序表 2 单链表 单向 不带头 非循环链表 3 顺序表和链表的区别 面试 线性表 List 是n个具有 相同特性 的数据元素的 有限序列 线性表是一种在实际中广泛使用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线
  • mac系统渗透测试小技巧-将命令行工具能够tab补全

    在kali中各种工具都能补全 但在mac中我们有些工具是需要自己下载回来的 每次使用工具都需要进入目录再打开命令行 这样会影响我们渗透测试的速度 说起来就是懒 懒人自有懒方法 其实很简单 我们只需要添加一个软连接到 usr local bi
  • 人工智能学习线路图

    人工智能学习线路图 Python教程 Python 教程 Python 简介 Python 环境搭建 Python 中文编码 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循环语
  • SpringCloud Gateway 在微服务架构下的最佳实践

    前言 本文整理自云原生技术实践营广州站 Meetup 的分享 其中的经验来自于我们团队开发的阿里云 CSB 2 0 这款产品 其基于开源 SpringCloud Gateway 开发 在完全兼容开源用法的前提下 做了诸多企业级的改造 涉及功
  • 从信号处理认识傅里叶变换

    前言 在表示和分析线性时不变系统时 我们的基本方法是将系统输入分解成基本信号的线性组合 其响应是基本输入响应的相同线性组合 卷积和和卷积积分源于我们将输入信号分解成基本信号的一种特定选择 特别是延迟的单位脉冲 这种选择的优点在于 对于线性时
  • 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分

    n是换行 英文是New line r是回车 英文是Carriage return r 是回车 前者使光标到行首 carriage return n 是换行 后者使光标下移一行 line feed r 是回车 return n 是换行 new
  • 将COLMAP中生成的images.txt结果可视化

    instant ngp中执行scripts colmap2nerf py时 在colmap text目录下会生成images txt文件 此文件中每两行定义一幅图像的信息 IMAGE ID QW QX QY QZ TX TY TZ CAME
  • HTTP协议和HTTPS协议的区别

    HTTP协议和HTTPS协议的区别 1 HTTP协议传输的数据都是未加密的 也就是明文的 使用HTTP协议传输隐私信息不安全 2 HTTPS协议是由SSL 安全套接层 为网络通信提供安全及数据完整性的一种安全协议 和HTTP协议构建的 是一
  • Nacos启动异常

    可能原因一 集群切换单机 startup m standalone 可能原因二 derby data文件夹内文件解析失败 解决方案 删了derby data文件夹重启就行 报错信息 供网友搜索 2021 08 11 13 11 37 550
  • Fish Redux系列学习之认识view、action

    继续上一篇文章 Fish Redux系列学习之新建page以及认识state 如上图 现在我们学习的是buildview这个组件 说白了 buildView是我们写页面的地方 跟写普通flutter的page页面一样 我们将页面都写在这里面
  • Date互转String和时间戳

    Date转字符串 private static String convertDateToStr Date date String pattrn if date null return StringUtils EMPTY Instant in
  • 数据类型 -- uint32_t 类型

    整型的每一种都有无符号 unsigned 和有符号 signed 两种类型 float和double总是带符号的 在默认情况下声明的整型变量都是有符号的类型 char有点特别 如果需声明无符号类型的话就需要在类型前加上unsigned 无符
  • QT5 动态链接库的创建和使用(QT自己做动态库给自己使用)

    记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1 创建动态链接库 先新建一个库项目 选择chose进入下一下页面 类型选择共享库 输入一个名称 我输入的是sld 再点击下一步到 如果这里我们需要QtGui所以也勾选
  • osgEarth的Rex引擎原理分析(一一五)tif文件分辨率的计算

    目标 一一四 中的问题202 maxX为右经度 minX为左经度 maxY为上纬度 minY为下纬度 double resolutionX maxX minX double warpedDS gt GetRasterXSize double
  • cuBLAS的使用

    cuBLAS包含了三部分 cuBLAS API 从cuda6 0开始 CUBLASXT API 从cuda6 0开始 cuBLASLt API 从cuda10 1开始 想要使用cuBLAS API 必须按照以下步骤 在GPU端建立矩阵或向量
  • 资源有限的大型语言模型的全参数微调

    文章目录 摘要 1 简介 2 相关工作 3 方法 3 1 重新思考optimizer的功能 3 1 1 使用SGD 3 1 2 隐式BatchSize 3 2 LOMO 低内存优化 3 3 使用LOMO稳定训练 3 3 1 梯度归一化和裁剪
  • android layout 界面开发,Android开发之CoordinatorLayout使用详解一

    官网描述为 CoordinatorLayout是一个增强版的FrameLayout 继承自ViewGroup 用途 1 作为应用的顶层视图 2 作为一个可以指定子View之间相互作用的容器 通过给CoordinatorLayout的子Vie
  • 协程框架的堆栈大小陷阱

    昨晚和同事联调我们的开放平台 由于基于协程框架的网关服务器总是在接受两个消息后发生段错误 Core Dump掉 让我们百思不得其解 查看Dump文件 没有任何有效的调试信息 gdb设置断点调试 程序总是在接受到第二条消息之前 没到断点就崩溃
  • Qt连接Oracle数据库详细介绍(QOCI)

    Qt连接Oracle数据库详细介绍 1 前提条件 1 本地安装了Oracle数据库或者oracle instant client 2 已编译成功所需要的lib文件QOCI lib 这部分等我稍后补上 2 实现代码 1 包含lib文件 QtS
  • vue电商项目(三)——开发search页面

    目录 一 页面分析 二 获取数据到组件 1 获取数据 2 通过仓库getter简化数据 3 根据参数返回数据 1 将请求封装成一个方法 2 准备一个响应式数据 4 在发送请求之前准备好数据 三 渲染组件内容 1 完成子组件searchSel