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

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

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

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

  • 10
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Spring Boot 是一个用于构建独立的、可扩展的、基于Java的应用程序的框架。微信小程序是一种基于微信平台的轻量级应用程序。通过结合Spring Boot 和微信小程序开发实战,可以创建出功能丰富、灵活可扩展的小程序。 首先,可以使用Spring Boot 提供的便利性和高效性来创建一个后端服务。通过Spring Boot 的自动配置和快速开发特性,可以快速搭建一个高度可扩展的后端服务,支持实现用户登录验证、数据存储和访问等功能。 其次,可以利用微信小程序提供的各种API和功能来实现与用户的交互。可以使用微信小程序的界面组件和模板来构建用户界面,支持用户与小程序进行交互。同时,通过调用微信提供的API,可以实现用户登录、用户位置获取、支付等功能。 此外,通过Spring Boot 和微信小程序的结合,可以实现数据的实时同步和共享。可以通过后端服务将数据存储到数据库中,并通过微信小程序将数据展示给用户。同时,通过微信小程序提供的数据上报和反馈功能,可以将用户的操作数据实时传输到后端服务,并进行相应的处理。 最后,利用Spring Boot 和微信小程序开发实战,可以进行持续的迭代和优化。通过使用Spring Boot 提供的测试框架和集成开发环境,可以快速进行开发和测试。同时,通过微信小程序提供的发布和更新功能,可以实现小程序的持续改进和功能优化。 综上所述,通过Spring Boot 和微信小程序开发实战,可以创建出高效、灵活、功能强大的小程序,为用户提供良好的使用体验。同时,可以借助Spring Boot 和微信小程序提供的开发工具和功能,实现快速开发、持续迭代和优化的开发流程。 ### 回答2: Spring Boot是一种用于构建Java应用程序的开源框架。微信小程序是一种可以在微信中运行的小型应用程序。结合Spring Boot和微信小程序可以进行微信小程序开发实战。 在使用Spring Boot开发微信小程序时,我们可以使用Spring Boot的各种特性和功能来加快开发速度和简化开发过程。首先,我们可以使用Spring Boot的自动配置功能来快速配置和集成微信小程序的相关组件和功能。例如,我们可以使用Spring Boot的自动配置来集成微信小程序的授权登录和用户信息获取功能,这样我们就可以快速实现用户登录和权限控制。 其次,Spring Boot有良好的开发文档和社区支持,我们可以通过查阅文档和参与社区讨论来解决开发过程中的问题和困惑。同时,Spring Boot也有丰富的第三方库和插件,我们可以借助这些工具来实现更复杂的功能和性能优化。 此外,Spring Boot还提供了方便的测试工具和环境,我们可以通过单元测试和集成测试来确保微信小程序的稳定性和质量。通过使用Spring Boot的测试工具,我们可以快速编写和运行各种类型的测试,例如接口测试、性能测试和压力测试等。 最后,Spring Boot具有良好的扩展性和可维护性,我们可以使用Spring Boot的模块化和组件化特性来管理和维护微信小程序的代码和资源。同时,Spring Boot也支持容器化部署,我们可以使用Docker等工具将微信小程序打包为容器镜像,并通过云平台实现自动化的部署和运维。 综上所述,使用Spring Boot进行微信小程序开发实战可以提高开发效率、简化开发过程、保证应用质量,并且具备良好的扩展性和可维护性。这些优点使得Spring Boot成为一种非常适合用于微信小程序开发的框架。 ### 回答3: Spring Boot 是一个开源的Java开发框架,它简化了Java应用程序的配置和部署过程。微信小程序是一种用于开发在微信平台上运行的小程序的框架。在开发微信小程序时,使用Spring Boot可以提供更高效、更简洁的开发方式。 首先,Spring Boot提供了丰富的功能和插件,可以帮助开发者快速搭建微信小程序的后端服务。通过使用Spring Boot的自动配置功能,可以省去繁琐的配置过程,并且可以轻松地集成其他常用的框架和组件,如数据库访问、缓存、消息队列等。 其次,Spring Boot提供了灵活的开发方式,可以根据具体需求选择使用Java、Kotlin或者Groovy等不同的开发语言。开发者可以根据自己的技术栈和喜好进行选择,提高开发效率。 另外,Spring Boot还提供了丰富的文档和社区支持,开发者可以轻松地学习和解决问题。通过参与Spring Boot社区,可以与其他开发者进行交流和分享经验,使开发过程更加顺利。 总结来说,Spring Boot在微信小程序开发中可以提供快速搭建后端服务、灵活的开发方式和丰富的文档和社区支持等优势。使用Spring Boot开发微信小程序,可以提高开发效率,减少不必要的工作量,让开发者能够更专注于业务逻辑的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值