青橙优购——首页分类导航区域 + 楼层区域

753 阅读1分钟

分类导航

1 获取分类导航的数据

实现思路:

  1. 定义 data 数据
  2. 在 onLoad 中调用获取数据的方法
  3. 在 methods 中定义获取数据的方法

示例代码如下:

export default {
  data() {
    return {
      // 1. 分类导航的数据列表
      navList: [],
    }
  },
  onLoad() {
    // 2. 在 onLoad 中调用获取数据的方法
    this.getNavList()
  },
  methods: {
    // 3. 在 methods 中定义获取数据的方法
    async getNavList() {
      const { data: res } = await uni.$http.get('/api/public/v1/home/catitems')
      this.navList = res.message
    },
  },
}

2 渲染分类导航的 UI 结构

  1. 不能只有一层或者将循环写到view上,否则就会独占一行

image.png image.png

  1. 定义如下的 UI 结构:

    <!-- 分类导航区域 -->
    <view class="nav-list">
       <view class="nav-item" v-for="(item, i) in navList" :key="i">
         <image :src="item.image_src" class="nav-img"></image>
       </view>
    </view>
    

3 切换到分类页面

  1. 为 nav-item 绑定点击事件处理函数:

    <!-- 分类导航区域 -->
    <view class="nav-list">
      <view class="nav-item" v-for="(item, i) in navList" :key="i" @click="navClickHandler(item)">
        <image :src="item.image_src" class="nav-img"></image>
      </view>
    </view>
    
  2. 定义 navClickHandler 事件处理函数:

    // nav-item 项被点击时候的事件处理函数
    navClickHandler(item) {
      // 判断点击的是哪个 nav
      if (item.name === '分类') {
        uni.switchTab({
          url: '/pages/cate/cate'
        })
      }
    }
    

    楼层区域

1 获取楼层数据

实现思路同上

2 渲染楼层的标题

  1. 定义如下的 UI 结构:

    <!-- 楼层区域 -->
    <view class="floor-list">
      <!-- 楼层 item 项 -->
      <view class="floor-item" v-for="(item, i) in floorList" :key="i">
        <!-- 楼层标题 -->
        <image :src="item.floor_title.image_src" class="floor-title"></image>
      </view>
    </view>
    
  2. 美化楼层标题的样式:

    .floor-title {
      height: 60rpx;
      width: 100%;
      display: flex;
    }
    

3 渲染楼层里的图片

  1. 定义楼层图片区域的 UI 结构:

    <!-- 楼层图片区域 -->
    <view class="floor-img-box">
      <!-- 左侧大图片的盒子 -->
      <view class="left-img-box">
        <image :src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix"></image>
      </view>
      <!-- 右侧 4 个小图片的盒子 -->
      <view class="right-img-box">
        <view class="right-img-item" v-for="(item2, i2) in item.product_list" :key="i2" v-if="i2 !== 0">
          <image :src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}"></image>
        </view>
      </view>
    </view>
    
  2. 美化楼层图片区域的样式:

    .right-img-box {
      display: flex;
      flex-wrap: wrap;
      justify-content: space-around;
    }
    
    .floor-img-box {
      display: flex;
      padding-left: 10rpx;
    }
    

4 点击楼层图片跳转到商品列表页

  1. 在 subpkg 分包中,新建 goods_list 页面

  2. 楼层数据请求成功之后,通过双层 forEach 循环,处理 URL 地址:

image.png ``` // 获取楼层列表数据 async getFloorList() { const { data: res } = await uni.http.get(/api/public/v1/home/floordata)if(res.meta.status!==200)returnuni.http.get('/api/public/v1/home/floordata') if (res.meta.status !== 200) return uni.showMsg()

  // 通过双层 forEach 循环,处理 URL 地址
  res.message.forEach(floor => {
    floor.product_list.forEach(prod => {
      prod.url = '/subpkg/goods_list/goods_list?' + prod.navigator_url.split('?')[1]
    })
  })

  this.floorList = res.message
}
```
  1. 把图片外层的 view 组件,改造为 navigator 组件,并动态绑定 url 属性 的值:

    <!-- 楼层图片区域 -->
    <view class="floor-img-box">
      <!-- 左侧大图片的盒子 -->
      <navigator class="left-img-box" :url="item.product_list[0].url">
        <image :src="item.product_list[0].image_src" :style="{width: item.product_list[0].image_width + 'rpx'}" mode="widthFix"></image>
      </navigator>
      <!-- 右侧 4 个小图片的盒子 -->
      <view class="right-img-box">
        <navigator class="right-img-item" v-for="(item2, i2) in item.product_list" :key="i2" v-if="i2 !== 0" :url="item2.url">
          <image :src="item2.image_src" mode="widthFix" :style="{width: item2.image_width + 'rpx'}"></image>
        </navigator>
      </view>
    </view>
    

5 分支的合并与提交

  1. 将本地的 home 分支进行本地的 commit 提交:

    git add .
    git commit -m "完成了 home 首页的开发"
    
  2. 将本地的 home 分支推送到远程仓库进行保存:

    git push -u origin home
    
  3. 将本地的 home 分支合并到本地的 master 分支:

    git checkout master
    git merge home
    git push -u origin master
    
  4. 删除本地的 home 分支:

    git branch -d home
    

    GitHub项目地址

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情