小程序商城项目分类页面完整搭建

一、分析结构与数据

  • 首先,我们我们需要完成的雏形大概是这样子的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmLIbRLW-1614608135869)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/1.jpg)]

  • 结合请求来的数据分析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sr6G8IDX-1614608135875)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/2.jpg)]

  • 我们需要将请求来的数据分为左右两部分,分别填充到两侧的滚动页面中。

二、请求数据

  • 为了请求数据时url的简化,我们在request文件夹下index.js文件中配置一个公共的路径baseUrl
  • 并且在成功回调时,直接传入result.data.message

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZrT0URbR-1614608135876)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/3.jpg)]

  • 与data同级定义一个Cates存放请求来的数据,接口的返回数据,不放data里面因为他不与渲染层交互,只是临时存储,省资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-68L3zHR7-1614608135880)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/4.jpg)]

  • 封装一个简单的getCates()方法,仅用来获取数据:
request({
  url: "/categories"
})
  .then(res => {
    this.Cates = res;
    // 构造左侧的 大菜单数据
    let leftMenuList = this.Cates.map(v => v.cat_name);
    // 构造右侧的 商品数据
    let rightContent = this.Cates[0].children;
    this.setData({
      leftMenuList,
      rightContent
    })
  })
  • 可以直接在onLoad声明周期中调用刚才的getCates()方法,获取数据。但更好的做法是增加本地缓存,避免重复请求数据造成资源浪费。
  • 所以,可以在getCates()方法中添加一步将数据添加到缓存中。
// 把接口的数据存入到本地存储中
wx.setStorageSync("cates", {time: Date.now(), data: this.Cates});
  • 而更好的办法是使用es7的async await来发送请求,所以getCates()方法最终的代码是这样的:
// 获取分类数据
async getCates() {
  // 使用es7的async await来发送请求
  const res = await request({ url: "/categories" });
  this.Cates = res;
  // 把接口的数据存入到本地存储中
  wx.setStorageSync("cates", {time: Date.now(), data: this.Cates});
  // 构造左侧的 大菜单数据
  let leftMenuList = this.Cates.map(v => v.cat_name);
  // 构造右侧的 商品数据
  let rightContent = this.Cates[0].children;
  this.setData({
    leftMenuList,
    rightContent
  })
}
  • 在onLoad中执行判断:
onLoad: function (options) {
  /*
  0. 以前web中的本地存储和小程序的本地存储的区别
    1 写代码的方式不一样
      web: localStorage.setItem("key", "value") localStorage.getItem("key")
      小程序: wx.setStorageSync("key", "value") wx.getStorageSync("key")
    2 存的时候 有没有做类型转换
      web: 不管存入什么数据,最终都会先调用一下toString(),把数据变成字符串 再存入
      小程序: 不存在类型转换这个操作 存什么类型的数据进入,获取的时候就是什么类型
  1. 先判断本地存储中有没有旧的数据
    {{time:Data.now(),data:[...]}}
  2. 没有旧的数据 直接发送新请求
  3. 有旧数据 同时 旧的数据没有过期 就是用 本地存储中的旧数据即可
  */
  
  // 1.获取本地存储中的数据(小程序中也存在本地存储技术)
  const Cates = wx.getStorageSync("cates");
  // 2.判断
  if (!Cates) {
    // 不存在 发送请求获取数据
    this.getCates();
  } else {
    // 有旧的数据 暂时定义一个过期时间 10s => 5min
    if (Date.now() - Cates.time > 1000 * 60 * 5) {
      // 重新发送请求
      this.getCates();
    } else {
      // 可以使用旧的数据
      this.Cates = Cates.data;
      let leftMenuList = this.Cates.map(v => v.cat_name);
      let rightContent = this.Cates[0].children;
      this.setData({
        leftMenuList,
        rightContent
      })
    }
  }
}
  • 这样就可以判断上一次请求缓存的时间有没有超过5分钟,如果超过5分钟就从新请求,如果没有超过5分钟,就是用本地缓存的数据,避免多次请求。

三、设计分类页面结构

  • 首先,分类页面也使用了之前定义的自定义组件SearchInput,所以需要在category/index.json文件中配置自定义组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cio6FtHm-1614608135881)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/5.jpg)]

  • 然后构建页面,顶部搜索栏,下面左侧商品菜单,下面右侧商品列表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hLQiPAFD-1614608135882)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/6.jpg)]

  • 左侧菜单很简单,获取的直接就是菜单信息了,但是需要考虑点击事件
<!-- 左侧菜单 -->
<scroll-view scroll-y class="left_menu">
  <view
    class="menu_item {{index === currentIndex? 'active' : ''}}"
    wx:for="{{leftMenuList}}"
    wx:key="*this"
    bindtap="handleItemTap"
    data-index="{{index}}">
    {{item}}
  </view>    
</scroll-view>
  • 为了完成点击变换的功能,我们在data中新建一个currentIndex数据用来记录当前点击的分类名称在菜单中的序号,如果currentIndex与某个分类对应,则动态绑定active类,改变他的样式。
  • 而且此时,可以根据获取到的index,来改变右侧商品的数据,并且每次点击之后将右侧内容从新置顶(需要在data中添加scrollTop并绑定给右侧商品scroll-y属性)
// 左侧菜单的点击事件
handleItemTap(e) {
  /*
  1. 获取被点击的标签身上的索引
  2. 给data中的currentIndex赋值就可以了
  3. 根据不同的索引来渲染右侧商品内容
  */
  const { index } = e.currentTarget.dataset;
  let rightContent = this.Cates[index].children;
  this.setData({
    currentIndex: index,
    rightContent,
    // 重新设置 右侧内容的scroll-view标签的距离顶部距离
    scrollTop: 0
  })
  
}
  • 右侧商品列表需要再进一步的循环获取数据,不过格式依然比较简单:
<!-- 右侧商品内容 -->
<scroll-view scroll-top="{{scrollTop}}" scroll-y class="right_content">
  <view 
    class="goods_group"
    wx:for="{{rightContent}}"
    wx:for-item="item1"
    wx:for-index="index1"
    wx:key="*this">
    <view class="goods_title">
      <text class="delimiter">/</text>
      <text class="title">{{item1.cat_name}}</text>
      <text class="delimiter">/</text>
    </view>
    <view class="goods_list">
      <navigator
        wx:for="{{item1.children}}"
        wx:for-item="item2"
        wx:for-index="index2"
        wx:key="cat_id">
        <image mode="widthFix" src="{{item2.cat_icon}}"/>
        <view class="goods_name">{{item2.cat_name}}</view>
      </navigator>
        
    </view>
  </view>
</scroll-view>

四、添加样式并调试

  • 调试样式是比较辛苦

index.less:

page {
  height: 100%;
}
.cates {
  height: 100%;
  .cates_container {
    // less中使用calc()要注意
    height: ~'calc(100vh - 90rpx)';
    display: flex;
    .left_menu {
      // 子项 高度 100% flex
      flex: 2;
      .menu_item {
        height: 80rpx;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 30rpx;
      }
      .active {
        color: var(--themeColor);
        border-left: 5rpx solid currentColor;
      }
    }
    .right_content {
      // 子项 高度 100% flex
      flex: 5;
      .goods_group {
        .goods_title {
          height: 80rpx;
          display: flex;
          justify-content: center;
          align-items: center;
          .delimiter {
            color: #ccc;
            padding: 0 10rpx;
          }
          .title {

          }
        }
        .goods_list {
          display: flex;
          flex-wrap: wrap;
          navigator {
            width: 33.33%;
            text-align: center;
            image {
              width: 50%;
            }
            .goods_name {

            }
          }
        }
      }
    }
  }
}

五、效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IAPQtp3-1614608135884)(/Users/mac/Desktop/前端学习笔记/小程序/分类页面搭建/7.gif)]

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
积分商城微信小程序前端页面搭建需要掌握以下技术: 1. HTML/CSS/JS:这些是前端开发的基础,需要掌握HTML页面结构和CSS样式布局的基本概念,以及JavaScript的基本语法和操作DOM的方法。 2. 微信小程序开发:需要掌握微信小程序开发框架的基本概念、API的使用和小程序的生命周期。 3. 小程序UI框架:可以选择使用一些流行的小程序UI框架,如WeUI、Vant等,来简化前端开发流程。 以下是积分商城微信小程序前端页面搭建步骤: 1. 创建小程序项目:在微信开发者工具中创建一个新的小程序项目,并选择合适的小程序类型。 2. 搭建页面结构:使用HTML/CSS搭建小程序页面的基本结构和样式布局,并将页面组件化,方便后续的代码维护。 3. 添加小程序逻辑:使用JavaScript编写小程序页面的逻辑代码,如数据请求、事件处理等,并将页面与后端API进行数据交互。 4. 集成UI框架:选择合适的小程序UI框架,并根据框架的文档说明进行集成和使用。 5. 测试和调试:在微信开发者工具中进行小程序的测试和调试,并根据反馈进行优化和改进。 6. 发布小程序:完成小程序开发后,可以将其发布到微信小程序平台上,供用户下载和使用。 需要注意的是,积分商城微信小程序前端页面搭建需要结合后端API进行数据交互,因此前端开发人员需要与后端开发人员密切协作,确保页面和API的数据格式和接口定义一致。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值