微信小程序开发一个小型商城(四、商品列表)

2023-11-07

上一篇文章,微信小程序开发一个小型商城(三、商品分类设计)
在从上一个界面跳转过来,会看到商品列表这个界面:如下图所示:
在这里插入图片描述
页面分析:从上到下:分别是一个已经定义好的自定义组件,下面的综合,销量,也是一个自定义组件。下面商品的一个个的小框框就是一个个的navigetor。

自定义组件

使用已经定义好了的组件。先在category/index/index.json文件引入组件,随后在wxml文件当中直接调用组件即可。同理定义一个Tabs组件:
最开始我们需要在good_list/index.js文件下的data里面加上一个数组,用于tabs组件渲染:

tabs: [
      {
        id: 0,
        value: "综合",
        isActive: true
      },
      {
        id: 1,
        value: "销量",
        isActive: false
      },
      {
        id: 2,
        value: "价格",
        isActive: false
      }
    ],

随后回到Tabs组件当中定义wxml文件,静态页面以及渲染tabs数组

<view class="tabs">
    <view class="tabs_title">
        <view wx:for="{{tabs}}"
        wx:key="id"
        class="title_item  {{item.isActive?'active':''}}"
        bindtap = "handleItemTap"
        data-index="{{index}}"
        >
            {{item.value}}
        </view>
          
    </view>
      <view class="tabs-content">
          <slot></slot>
      </view>
</view>

加上些许样式:display使其在同一行显示,active 是否选中,选中后加上下标颜色

.tabs_title{
        display: flex;
       }
        .title_item{
            display: flex;
            justify-content: center;
            align-items: center;
            flex: 1;
            padding: 15rpx 0; 
        }
        .active{
            color: var(--themeColor);
            border-bottom: 5px solid currentColor;
        }

在这种需要绑定事件的自定义组件当中,先在properties下声明tabs数组的类型和值

tabs: {
      type: Array,
      value: []
    }

随后编写点击事件,获取index索引改变isActive的值,从而改变下标颜色,在method下面编写

handleItemTap(e){
      //获取点击的索引
      const{index}=e.currentTarget.dataset;
      console.log(index)
      //触发父组件的自定义事件
      this.triggerEvent("tabsItemChange",{index});
    }

在都写完后不要忘记在goods_list/index.json文件当中调用这个组件

商品列表

对不同的tabs所对应不同的商品列表使用block占位符进行隔开,以及获取左侧图标的地方,在部分商品当中可能会缺失图标,使用?:的形式加上一张图片,以及需要绑定一个单击事件使得跳转到商品详情页面和一个标题的自定义事件,

<SearchInput></SearchInput>
<Tabs tabs="{{tabs}}" bindtabsItemChange="handleTabsItemChange">
    <block wx:if="{{tabs[0].isActive}}">
        <view class="frist_tab">
            <navigator class="goods_item" wx:for="{{goodslist}}"  url="../goods_detail/main?goods_id={{item.goods_id}}" wx:key="goods_id">
                <!--左侧图片-->
                <view class="goods_img_wrap">
                    <image
                        src="{{item.goods_small_logo?item.goods_small_logo:'http://image1.suning.cn/uimg/b2c/newcatentries/0000000000-000000000601395527_1_400x400.jpg'}}"
                        mode="widthFix" />
                </view>
                <!--右侧商品-->
                <view class="goods_info_wrap">
                    <view class="goods_name">{{item.goods_name}}</view>
                    <view class="goods_price">¥{{item.goods_price}}</view>
                </view>
            </navigator>
        </view>
    </block>
    <block wx:elif="{{tabs[1].isActive}}">1</block>
    <block wx:elif="{{tabs[2].isActive}}">2</block>
</Tabs>

随后就是给标签加上样式,使得一个商品占据整个宽,高度都一致,左侧图片占据多宽?右侧文字只显示俩行,多余的用...代替,和最后的商品价格为红色字体,一样使用less的方式:代码如下

.frist_tab{
    .goods_item{
        display: flex;
        border-bottom: 1px solid #ccc;
       .goods_img_wrap{
           flex: 2;
           display: flex;
           justify-content: center;
           align-items: center;
           image{
            width: 70%;
           }
       }
       .goods_info_wrap{
           flex: 3;
           display: flex;
           flex-direction: column;
           justify-content: space-around;
           .goods_name{
                display: -webkit-box;
                overflow: hidden;
                -webkit-box-orient:vertical;
                -webkit-line-clamp: 2;
           }
           .goods_price{
            color: var(--themeColor);
            font-size: 32rpx;
           }
       }
    }
}

商品列表事件详情

在这里使用到了es7语法,使用这个语法的时候,首先需要一大段代码,链接地址, (懒得找地址下载的地方了,直接上传到大学城上得了)在与pages同层级目录下新建一个lib文件夹,将代码复制粘贴进去。且勾选es6转es5语法
在这里插入图片描述
最后在goods_list下的index.js文件里面导入文件使用代码:

import { request } from "../../request/index.js";
import regeneratorRuntime from '../../lib/runtime/runtime';

在data里面定义变量:商品列表用于渲染,条数用于判断是否还可以翻页。

	//商品列表
    goodslist: [],
    //总页面的条数
    tatal: 0

data同层级下定义参数:接口链接余姚传递的参数:分别是:通过关键字查询的参数query、通过商品id查询的参数cid、初始页码pagesnum为1、一页有多少条数据pagesize为10

 //接口要的参数
  cid:0,
  QueryParams: {
    query:"", 
    cid:"",
    pagenum: 1,
    pagesize: 10
  },

标题自定义事件:根据传过来的index判断哪一个小标题标红

  //标题的自定义事件
  handleTabsItemChange(e) {
    //console.log(e)
    //获取索引值
    const { index } = e.detail;
    let { tabs } = this.data;
    tabs.forEach((v, i) => i === index ? v.isActive = true : v.isActive = false);
    this.setData({
      tabs
    })
  },

获取商品列表的函数,并且计算分页,一页10条数据,每一个界面共有多少条数据?在network当中即可查看,如下图;找到这个json文件,点开即可看到total的值为38
在这里插入图片描述
具体代码如下:在最后给goodslist数组赋值:使用拼接的方式。

  async  GetGoodsList() {
    const res = await request({url:"/goods/search",data:this.QueryParams});
    const total = res.total
    this.totalPages=Math.ceil(total/this.QueryParams.pagesize);
    console.log(this.totalPages)
    this.setData({
       goodslist: [...this.data.goodslist, ...res.goods]
     })
    //关闭下拉刷新的窗口
   wx.stopPullDownRefresh(); 
  },

到最后在onLoad函数里面调用即可:

    this.QueryParams.cid = options.cid||"";
    this.GetGoodsList();

记过这一系列步骤之后,在appdata里面将会看到goodlist的值:并且它的值只有10个,这是因为在我们的设定下最开始只有第一页而第一页嘴都只有10条数据,
在这里插入图片描述
翻页效果和下拉刷新效果:查看下一页数据,单击前往刷新页面,单击前往
当我们下拉刷新到下一页的时候。我们的goodlist数组的值将会按10进行递增,也就是在前面调用接口的地方对goodlist数组赋值是按拼接的方式来完成的,如下所示:在刷新基础后goodlist的值就是40了
在这里插入图片描述

感谢你的阅读:持续更新中…

下一篇文章:微信小程序开发一个小型商城(五、商品详情)

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

微信小程序开发一个小型商城(四、商品列表) 的相关文章

  • mysql binlog 使用指南

    MySQL binlog 详解 1 前言 日志是把数据库的每一个变化都记载到一个专用的文件里 这种文件就叫做日志文件 Mysql默认只打开出错日志 因为过多的日志将会影响系统的处理性能 在5 0前支持文本格式和二进制格式 5 0后只支持二进
  • 【c++】private里面的变量可以间接访问和修改嘛?

    五月出差频繁 只有趁着周末不加班拿出一点时间记录下最近学到的东西 下面是正文 我们都知道 C 中有一个叫访问权限的知识点 被定义在 private 中的方法或者对象理论上是无法直接访问的 被定义在 public 中的方法或者对象理论上是可以
  • RabbitMQ的安装

    一 安装erlang环境 官网下载 http www erlang org downloads 这个文件其实不是gz格式的 使用file otp src 20 1 tar gz可以查看它的真实数据格式 解压 tar xvf otp src
  • 单片机变量所储存的变量值转化为字符

    最近做了一个设计 需要使用单片机设计一个距离采集系统 并将采集的距离大小通过语音播报出来 同时通过蓝牙传至手机端 不论是蓝牙还是语音播报都涉及到将变量中所储存的数值大小转化为字符串 编写代码环境 单片机 STM32F103C8T6 编写软件
  • qt学习笔记1:创建一个qt项目及一些基础知识

    1 新建第一个项目 New Project gt qt widges application 给项目创建名称 名称不能有中文和空格 创建路径中也不能有中文路径 不会报错但是运行时会报错 再下一步 到Kits 中文构建套件 用于选择编译套件
  • C++学习(三十三)运算符优先级

    C语言优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 数组下标 数组名 整型表达式 左到右 圆括号 表达式 函数名 形参表 成员选择 对象 对象 成员名 gt 成员选择 指针 对象指针 gt 成员名 2 负号运算符 算术类
  • 解决Glide在一个imageview上更换图片时会闪的问题

    Glide with MainActivity this load str msg what 1 dontAnimate placeholder iv getDrawable 原理 1 使用dontAnimate取消图片切换动画 2 使用p
  • scrapy屏幕log日志输出保存到txt文本中

    在使用scrapy框架的时候 因为scrapy在屏幕上面输出的日志一直在跑 有些错误又抓不到 无奈只能先把log日志放在文件中 慢慢进行错误日志的分析 如图所示 我们需要设置的地方只在settings py文件夹中进行设置就可以了 LOG
  • 电商系统下单锁库存java实现,【239期】面试官:如何使用Redis实现电商系统的库存扣减?...

    在日常开发中有很多地方都有类似扣减库存的操作 比如电商系统中的商品库存 抽奖系统中的奖品库存等 解决方案 使用mysql数据库 使用一个字段来存储库存 每次扣减库存去更新这个字段 还是使用数据库 但是将库存分层多份存到多条记录里面 扣减库存

随机推荐

  • 全国计算机等考试体系2018,2018年陕西全国计算机等级考试体系及方式

    2017年计算机等级考试已经结束 出国留学网为考生们整理了2018年陕西全国计算机等级考试体系及方式 希望能帮到大家 想了解更多资讯 请关注我们 小编会第一时间更新哦 2018年陕西全国计算机等级考试体系及方式 一 报名与考场编排 一 报名
  • 使用http 上传文件的原理

    可参考的文章有 http www cnblogs com kaixuan archive 2008 01 31 1060284 html 通过 http 协议上传文件 rfc1867协议概述 jsp 应用举例 客户端发送内容构造 1 概述
  • 如何分析AIX启动过程1

    复杂度3 5 机密度4 5 最后更新2021 05 14 AIX提供了两个帮助分析启动的工具或者模式 kernel debug boot verbose mode 前者适合单独分析某个特定的功能 模块 而后者则能帮助你全面地过一遍AIX启动
  • .net html转为pdf,.NET使用DinkToPdf将HTML转成PDF的示例代码

    0 介绍 C NET Core wrapper for wkhtmltopdf library that uses Webkit engine to convert HTML pages to PDF 最近浏览文章的时候发现DinkToPd
  • Linux 中软件包的安装常用指令

    目录 apt 常用指令 yum 常用指令 apt 常用指令 apt 与 apt get 大部分参数通用 但也会有区别 执行 apt 命令时 需要使用 root 用户的身份执行命令 如果报错 无效的操作 那可以加个sudo 试试 更新软件源
  • KMP算法详解

    目录 一 KMP是什么 二 原理 1 思路 2 预处理 3 借助nxt实现字符串匹配 总结 一 KMP是什么 烤馍片KMP算法是一种改进的字符串匹配算法 由D E Knuth J H Morris和V R Pratt提出的 因此人们称它为克
  • labelme汉化的app.py完整代码

    由于之前做了一期labelme的教程 但是汉化部分的代码有误 于是在这里贴出完整的app py代码 coding utf 8 import functools import math import os import os path as
  • scrapy错误-[scrapy.core.scraper] ERROR: Spider error processing

    一 问题 就是我的callback没得回调函数 二 然后我查看源代码 发现 三 我把解析页数的函数名设置为 def parse self response 就没保错了 能运行成功 总结 在spider的 init py文件的源代码下 设置了
  • 什么是HTML? 看这一篇就够了(附带主流IDE推荐)

    1 HTML简介 1 1 HTML是什么 百度词条 HTML称为超文本标记语言 是一种标识性的语言 它包括一系列标签 通过这些标签可以将网络上的文档格式统一 使分散的Internet资源连接为一个逻辑整体 HTML文本是由HTML命令组成的
  • 第十九篇:处理僵尸进程的两种经典方法

    前言 如果父进程没有结束 而子进程终止了 那么在父进程调用 wait 函数回收这个子进程或者父进程终止以前 这个子进程将一直是僵尸进程 本文将提供两种方法处理这个问题 方法一 父进程回收法 wait函数将使其调用者阻塞 直到其某个子进程终止
  • 伺服电机的三种控制方式与三闭环控制

    项目 FPGA双电机主从快速稳定控制实现 第一章 伺服电机的三种控制方式与三闭环控制 伺服电机的三种控制方式与三闭环控制 项目 FPGA双电机主从快速稳定控制实现 前言 一 电机控制方式 二 电机三个闭环负反馈PID控制系统 三 三闭环位置
  • GLUE基准数据集介绍

    图1 整篇文章的思维导图 一 简介 自然语言处理 NLP 主要自然语言理解 NLU 和自然语言生成 NLG 为了让NLU任务发挥最大的作用 来自纽约大学 华盛顿大学等机构创建了一个多任务的自然语言理解基准和分析平台 也就是GLUE Gene
  • 完美解决dataframe添加列,并且指定列的位置

    需求是这样的 我需要从原始表中提取几列数据 分别填入税表的人员和收入表中 原始表中只有 姓名 身份证号码 年金领取额是有效数据 但是税务局的模板表中有一大堆莫名其妙的字段不需要填写 先把原始表定义一下 把身份证字符串一下 再把需要的人员 收
  • Spark整理

    文章目录 1 概述 1 1 Spark 和 Hadoop 组成 1 2 Spark 和 Hadoop 区别 2 Spark 运行架构 2 1 基础架构 2 2 Master Worker Standalone模式 2 3 Applicati
  • 如何给VScode安装clang(C language)插件

    前言 1 本篇经验专门为 使用VScode开发c语言项目的学生和工程师而写 2 安装了clang C language 插件的VScode编辑器 补全功能将更加智能 正文 首先你得先安装vscode软件 安装教程请参考下链接 对于本人就不费
  • STC15单片机——定时/计数器2、3、4

    STC15单片机拥有5个定时器 分别为定时器0 1 2 3 4 本文章将记录定时器2 3 4所使用的寄存器 以及注意事项 由于STC15单片机定时器的使用于传统51单片机类似 这里仅标出应用所需的j寄存器 以及对陌生位的相关说明 其他不作过
  • 2020年下一个创业风口是什么?

    提到风口 大家总是兴致勃勃 满心期待的看完一个风口项目后 剩下的不是去选择执行 而是继续问道 还有其它的风口项目吗 所以 在我看来 对于大多数人而言 风口就是继续追问 没完没了的问还有其它的吗 今年没有抓住风口 告诉自己 不能灰心 明年拜菩
  • 支持向量机(SVM)

    SVM简介 SVM Support Vector Machine 它是一种二分类模型 其基本模型定义为特征空间上的间隔最大的线性分类器 其学习策略便是间隔最大化 最终可转化为一个凸二次规划问题的求解 这里涉及了几个概念 二分类模型 线性分类
  • 去除百度推广等广告的插件神器

    给大家推荐一款去除百度推广的神器 包括右边 及右下角弹出的广告 1 搜索ADblock进入官网https adblockplus org 点击 安装到chrome 弹出提示框点击 添加扩展程序 2 重新打开网址 你会发现之前的广告都消失了
  • 微信小程序开发一个小型商城(四、商品列表)

    上一篇文章 微信小程序开发一个小型商城 三 商品分类设计 在从上一个界面跳转过来 会看到商品列表这个界面 如下图所示 页面分析 从上到下 分别是一个已经定义好的自定义组件 下面的综合 销量 也是一个自定义组件 下面商品的一个个的小框框就是一