微信小程序开发--分类页面实现

微信小程序开发–分类页面实现

之前在详情页面利用Vant WeappUI库构建出了GoodsAction 商品导航功能,接着需要在分类页面(kind.wxml)实现商品分类

1.引入第三方组件

用到的是Tab标签页

kind.json中写入:

"usingComponents": {
  "van-tab": "/miniprogram_npm/@vant/weapp/tab/index",
  "van-tabs": "/miniprogram_npm/@vant/weapp/tabs/index"
}

注意路径要正确!!!

2.使用组件

kind.wxml中使用组件:

<van-tabs active="{{ active }}" bind:change="onChange">
  <van-tab title="标签 1">内容 1</van-tab>
  <van-tab title="标签 2">内容 2</van-tab>
  <van-tab title="标签 3">内容 3</van-tab>
  <van-tab title="标签 4">内容 4</van-tab>
</van-tabs>

如果报错可能是因为js文件中没有对应的数据变量和方法:

Page({
  data: {
    active: 1,
  },

  onChange(event) {
    wx.showToast({
      title: `切换到标签 ${event.detail.name}`,
      icon: 'none',
    });
  },
});

3.获取接口数据

1.获取Tab标签内容
onLoad: function (options) {
    // 获取顶部分类
    this.loadTopCategory()
  },
/**
* 获取顶部分类
*/
loadTopCategory () {
    request ({
      url: '/pro/category',
      data : {
        type: 'type'
      }
    }).then(res => {
      console.log(res.data.data)
        this.setData({
        	titles: res.data.data
      	})
    })
},

然后在页面上遍历数据:

<van-tabs active="{{ active }}" bind:change="onChange">
  <van-tab wx:for="{{titles}}" wx:key="index" title="{{item}}">内容 1</van-tab>
</van-tabs>
2.获取tab标签下的大分类内容

在大分类里面用到的是侧边导航栏来显示各个品牌,首先还是引入组件

"usingComponents": {
  "van-sidebar": "@vant/weapp/sidebar/index",
  "van-sidebar-item": "@vant/weapp/sidebar-item/index"
}

在页面上使用组件:

<van-sidebar active-key="{{ activeKey }}">
	<van-sidebar-item wx:for="{{brandlist}}" wx:key="index" title="{{item.brand}}" />
</van-sidebar>

编写js逻辑:

data: {
    brandlist: [], //tab下面大分类的内容
    activeKey: 0,
},
/**
* tab标签点击事件
*/
onChange(event) {
    console.log(event)
    const {index,name,title} = event.detail
    // 请求大分类下的品牌详细数据
    this.requestCategoryToBrand(title)
    // wx.showToast({
    //   title: `切换到标签 ${event.detail.name}`,
    //   icon: 'none',
    // });
},
/**
* 请求大分类下的品牌详细数据
*/
requestCategoryToBrand (title) {
    request({
      url: '/pro/categorybrand',
      data: {
        category: title
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        brandlist: res.data.data
      })
    })
  },

这里还有一个问题就是在你第一次进入小程序时,品牌信息不会显示,所以需要在请求大分类的时候同时选择一个分类的品牌数据进行请求作为默认显示

loadTopCategory () {
    request ({
      url: '/pro/category',
      data : {
        type: 'type' //传递的参数
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        titles: res.data.data
      })
      //在上面的data中的active指明了默认显示的tab,因此默认的品牌信息也应该是该tab下的
      // this.data.titles --- 大分类的数组
      // this.data.active --- 当前选中的大分类的索引值
      this.requestCategoryToBrand(this.data.titles[this.data.active]);
    })
},
3.获取大分类下的品牌下的数据内容

首先在kind.json文件中引入之前详情页面的prolist自定义组件:

 "prolist": "/components/prolist/prolist"

然后编写js逻辑:

data: {
    kindlist: [], //大分类下的品牌下的数据列表内容 
},
...
onTabChange(event) {
    console.log(event)
    const {index,name,title} = event.detail
    this.setData({ //每次切换tab栏的时候就将active的值动态变化
      active: index
    })
    ...
},
...
 /**
   * 请求大分类下的品牌下的数据列表内容
   */
getKindList (event) {
    const { brand } = event.currentTarget.dataset
    console.log(brand)
    request({
      url: '/pro/categorybrandlist',
      data: {
        category: this.data.titles[this.data.active],
        brand: brand,
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        kindlist: res.data.data
      })
    })
},

最后在页面上渲染:

<van-sidebar-item wx:for="{{brandlist}}" data-brand="{{item.brand}}" wx:key="index" title="{{item.brand}}" bindtap="getKindList" class="van-sidebar-item"/>
</van-sidebar>
<prolist prolist="{{ kindlist }}" class="prolist"/>

另外在初次进入页面时虽然有了默认显示的菜单选项,但是默认内容并没有显示:

requestKindListData(brand) {
    console.log(brand)
    request({
        url: '/pro/categorybrandlist',
        data: {
        category: this.data.titles[this.data.active],
        brand: brand,
    }
    }).then(res => {
        console.log(res.data.data)
        this.setData({
        kindlist: res.data.data
    })
    })
}

该方法在获取大分类下的品牌后直接调用即可,并传递一个参数就是当前默认选中的品牌。另外,还要注意

在使用van-sidebarvan-sidebar-item标签的时候,默认显示的内容会被挤到页面的下方,解决方法有:1.可以在@vant下的weapp下去找到对应的组件的源码文件并修改css属性,另外还可以使用van-tree-select来实现左侧导航右侧显示自定义内容,具体代码如下:

kind.wxml

<!--pages/kind/kind.wxml-->
<van-tabs active="{{ active }}" bind:change="onTabChange">
  <van-tab wx:for="{{titles}}" wx:key="index" title="{{item}}">
    <van-tree-select class="select"
      items="{{ items }}"
      height="55vw"
      main-active-index="{{ mainActiveIndex }}"
      active-id="{{ activeId }}"
      bind:click-nav="onClickNav"
      height="500px"
    >
    <prolist prolist="{{ kindlist }}" class="prolist" slot="content" />
    </van-tree-select>
  </van-tab>
</van-tabs>

kind.js

// pages/kind/kind.js
import { request } from './../../utils/index.js'
Page({
  /**
   * 页面的初始数据
   */
  data: {
    active: 0, //默认选中的tab标签
    titles: [], //tab标签的内容
    brandlist: [], //tab下面分类的内容
    activeKey: 0, //默认选中的品牌
    kindlist: [], //大分类下的品牌下的数据列表内容 
    mainActiveIndex: 0,
    activeId: null,
    items:[] //每个大类下面的品牌名数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取顶部分类
    this.loadTopCategory()
  },
  /**
   * 获取顶部分类
   */
  loadTopCategory () {
    request ({
      url: '/pro/category',
      data : {
        type: 'type' //传递的参数
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        titles: res.data.data,
      })
      //在上面的data中的active指明了默认显示的tab,因此默认的品牌信息也应该是该tab下的
      // this.data.titles --- 大分类的数组
      // this.data.active --- 当前选中的大分类的索引值
      this.requestCategoryToBrand(this.data.titles[this.data.active]); //刚进入时默认选择的大分类下面有哪些品牌
    })
  },
  /**
   * tab标签点击事件
   */
  onTabChange(event) {
    console.log(event)
    const {index,name,title} = event.detail
    this.setData({
      active: index
    })
    // 请求大分类下的品牌详细数据
    this.requestCategoryToBrand(title)
    // wx.showToast({
    //   title: `切换到标签 ${event.detail.name}`,
    //   icon: 'none',
    // });
  },
  /**
   * 侧边栏标签点击事件(二级菜单栏)
   */
  onClickNav(event) {
    console.log("11111")
    console.log(event)
    const {index} = event.detail //获取当前在左侧sidebar点击的索引值
    console.log(index)
    const brand = this.data.items[index].text
    console.log(brand)
    this.getKindList(brand)
  },
  /**
   * 初次进入页面请求的默认显示的商品数据
   */
  requestKindListData(brand) {
    console.log(brand)
    request({
      url: '/pro/categorybrandlist',
      data: {
        category: this.data.titles[this.data.active],
        brand: brand,
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        kindlist: res.data.data
      })
    })
  },
  /**
   * 请求大分类下的品牌数据
   */
  requestCategoryToBrand (title) {
    request({
      url: '/pro/categorybrand',
      data: {
        category: title
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        brandlist: res.data.data,
      })
      this.getBrandListData(this.data.brandlist)
      this.requestKindListData(this.data.brandlist[this.data.activeKey].brand) //初次进入时请求的商品数据要确保品牌数据已经获取到才可以
    })
  },
  /**
   * 获取每个大分类下的品牌信息作为二级菜单栏
   */
  getBrandListData(brandlist) {
    this.setData({
      items:brandlist.map((target) => {
        return {
          text: target.brand
        }
      })
    })
  },
  /**
   * 请求大分类下的品牌下的数据列表内容
   */
  getKindList (brand) {
    console.log(brand)
    request({
      url: '/pro/categorybrandlist',
      data: {
        category: this.data.titles[this.data.active],
        brand: brand,
      }
    }).then(res => {
      console.log(res.data.data)
      this.setData({
        kindlist: res.data.data
      })
    })
  },
...
})

至此为止,该小程序基本功能全部结束

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
汽车界面设计需要考虑到以下几个方面: 1. 用户体验:汽车界面设计需要考虑用户的体验感受,让用户在驾驶过程中能够快速便捷地完成操作,并且不影响驾驶安全。简洁明了的界面、大而清晰的按钮、易于理解的图标、直观的指示灯等都是提高用户体验的关键。 2. 可视性:汽车界面设计需要考虑到可视性,尤其是在夜间行驶时。设计师需要选择适合夜间行驶的颜色和亮度,以确保用户能够清晰地看到所有信息。 3. 功能性:汽车界面设计需要考虑到功能性。设计师需要确定哪些功能是最常用的,然后将它们放在最方便的位置,以便用户能够快速找到并使用。 4. 互动性:汽车界面设计需要考虑到互动性,即用户如何与界面交互。设计师需要选择合适的交互方式,例如触摸屏、按钮、旋钮等,以便用户能够轻松地完成操作。 针对微信小程序的汽车界面设计,可以考虑以下几个方面: 1. 界面设计:微信小程序的界面设计需要遵循微信小程序的设计规范,如简洁、易用、符合用户习惯等。可以采用卡片式设计,将各个功能模块分开,方便用户快速找到所需功能。 2. 颜色设计:在微信小程序汽车界面设计中,颜色的选择需要考虑到可视性和舒适性。可以选择明亮的颜色,与黑色底板形成鲜明对比,同时也需要考虑到夜间行驶的可视性。 3. 按钮设计:按钮的设计需要大而清晰,易于点击。可以采用扁平化的设计风格,将按钮颜色和背景色分开,以减少干扰。 4. 功能设计:在微信小程序汽车界面设计中,需要考虑到用户最常用的功能,例如导航、音乐、电话等,将它们放在最方便的位置,以便用户能够快速找到并使用。 最后,需要注意的是,微信小程序的汽车界面设计需要考虑到驾驶安全,不应该过于复杂,而应该尽可能简单明了,方便用户在驾驶过程中使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偶尔躲躲乌云_0

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

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

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

打赏作者

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

抵扣说明:

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

余额充值