微信小程序开发(实战案例):本地生活 - 列表页面开发(动态渲染处理)、节流防抖(节流阀应用)

本文介绍了如何在本地生活应用中,将九宫格分类替换为navigator组件,动态设置商品列表页的title,以及实现上拉触底加载数据、添加Loading效果和数据节流防抖处理的技术细节。
摘要由CSDN通过智能技术生成

本地生活 - 列表页面开发

在这里插入图片描述

导入我们上次写的 本地生活 - 首页开发的项目

  • 运行起来后我们先创建一个 商品列表页面

在这里插入图片描述

一、将九宫格分类换成navigator组件

<!-- 九宫格区域 -->
<view class="grid-list">
  <navigator class="grid-item" wx:for="{{gridList}}" wx:key="id" url="/pages/shoplist/shoplist?id={{ item.id }}&name={{ item.name }}">
    <image src="{{item.icon}}"></image>
    <text>{{item.name}}</text>
  </navigator>
</view>
  • 这一步是为了实现点击调转到指定的页面! 也就是 shoplist 页面!

二、动态设置商品列表页的 title

第一步:创建一个动态的 title 变量

	 * 页面的初始数据
	 */
	data: {
		// title 默认为空
		titleName: ""
	},

第二步:在 商品页面加载的时候动态的获取和设置 title 变量

	/**
	 * 生命周期函数--监听页面加载   options是导航参数对象
	 */
	onLoad(options) {
		// 页面一加载就设置 title 动态变量
		this.setData({
			titleName: options.name
		})
	},
  • 这里 我们将 传递过来的参数对象中的 name (商品分类名字)设置给我们data数据对象中的动态 title 变量

第三步: 调用 api 动态设置页面标题

	/**
	 * 生命周期函数--监听页面初次渲染完成
	 */
	onReady() {
		// 页面架子渲染完毕,触发的生命周期函数
		wx.setNavigationBarTitle({
			// 访问 动态的 title
			title: this.data.titleName
		})
	},
  • 这样就能实现根据我们点击的商品进行跳转,同时动态的渲染 title

在这里插入图片描述

三、动态渲染商品列表页面

在这里插入图片描述

代码示例:

onLoad(options) {
		// 页面一加载就 动态获取参数
		this.setData({
			id: options.id,
			titleName: options.name
		})

		// 商品数据请求
		this.getShopData()

	},

	// 商品请求方法
	getShopData() {
		// 发送网络请求 这里要求动态路径传递 id
		wx.request({
			url: `https://applet-base-api-t.itheima.net/categories/${this.data.id}/shops`,
			method: 'GET',
			data: {
				// 请求第几页的数据
				_page: this.data.page,
				// 每页请求几条数据
				_limit: this.data.pageSize
			},
			success: (successResult) => {
				console.log(successResult)
				this.setData({
					// 将获取到的商品信息存到 商品数组中
					shopList: [...this.data.shopList, ...successResult.data],
					// 这里是获取商品的总数,因为参数名有横线,所以这里用数组包字符串自动解析,并且转为数字类型
					total: successResult.header['X-Total-Count'] - 0
				})
			}
		})
	},

成功后处理数据
在这里插入图片描述


四、上拉触底加载数据

  • 通过手指向上滑动进行加载数据
	/**
	 * 页面上拉触底事件的处理函数
	 */
	onReachBottom() {
		// 如果节流阀请求未结束,则不允许在此重复发送请求
		if (this.data.isLoading) return
		this.getShopData();
	},

五、添加Loading加载效果

	// 商品请求方法
	getShopData() {
		this.setData({
			isLoading: true
		})
		// 加载 Loading
		wx.showLoading({
			title: '玩命加载中...',
		})
		// 发送网络请求 这里要求动态路径传递 id
		wx.request({
			url: `https://applet-base-api-t.itheima.net/categories/${this.data.query.id}/shops`,
			method: 'GET',
			data: {
				// 请求第几页的数据
				_page: this.data.page,
				// 每页请求几条数据
				_limit: this.data.pageSize
			},
			success: (successResult) => {
				console.log(successResult)
				this.setData({
					// 将获取到的商品信息存到 商品数组中
					shopList: [...this.data.shopList, ...successResult.data],
					// 这里是获取商品的总数,因为参数名有横线,所以这里用数组包字符串自动解析,并且转为数字类型
					total: successResult.header['X-Total-Count'] - 0
				})
			},
			complete: () => {
				// 数据请求完毕,将节流阀 改为 false 表示可以加载数据了
				this.setData({
					isLoading: false
				})

				// 请求结束后,关闭加载效果
				wx.hideLoading()
			}
		})
	},

在这里插入图片描述

六、数据加载节流防抖处理

		// 节流阀开关
		isLoading: false


		// 在请求数据的时候,将开关进行修改
			// 商品请求方法
	getShopData() {
		this.setData({
			isLoading: true
		})

		// 数据请求完毕,在关闭节流阀
// 数据请求完毕,将节流阀 改为 false 表示可以加载数据了
	this.setData({
		isLoading: false
	})



		// 通过节流阀判断是否发送数据请求
			onReachBottom() {
		// 如果节流阀请求未结束,则不允许在此重复发送请求
		if (this.data.isLoading) return
		this.getShopData();
	},
  • 最终,简单的商品列表页动态数据渲染就结束了
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脱发使我稳重

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

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

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

打赏作者

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

抵扣说明:

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

余额充值