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

news/2024/7/7 16:11:53 标签: 微信小程序, 生活, 小程序

文章目录

  • 本地生活 - 列表页面开发
      • 一、将九宫格分类换成navigator组件
      • 二、动态设置商品列表页的 title
      • 三、动态渲染商品列表页面
      • 四、上拉触底加载数据
      • 五、添加Loading加载效果
      • 六、数据加载节流防抖处理

本地生活 - 列表页面开发

在这里插入图片描述

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

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

在这里插入图片描述

一、将九宫格分类换成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();
	},
  • 最终,简单的商品列表页动态数据渲染就结束了
    在这里插入图片描述

http://www.niftyadmin.cn/n/5391830.html

相关文章

C++知识点总结(22):模拟算法

一、概念 模拟算法 根据题目描述进行筛选提取关键要素&#xff0c;按需求书写代码解决实际问题的算法。 二、步骤 1、提取题目的关键要素 2、根据关键要素的需求完成代码 三、关键要素 1、题目目的 2、样例的执行逻辑&#xff08;样例分析&#xff09; 3、数据范围&#xff08;…

445. 两数相加 II(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&am…

Vue2:路由的props配置

一、情景说明 我们在之前学习了路由组件的参数传递技术 但是&#xff0c;我们发现&#xff0c;在接收参数时&#xff0c;我们的写法太繁琐 <li>消息编号&#xff1a;{{$route.params.id}}</li><li>消息标题&#xff1a;{{$route.params.title}}</li>这…

注解开发总结

目录 注解开发定义bean纯注解开发bean作用范围与生命周期依赖注入——自动装配第三方 bean第三方 bean 管理第三方 bean 依赖注入 XML配置比对注解配置 注解开发定义bean 使用 Component 定义 bean &#xff0c; 括号里面可以认为是 id Component("bookDao") publi…

ESbuild 简介

Esbuild 是什么&#xff1a; ESbuild 是一个类似webpack构建工具。它的构建速度是 webpack 的几十倍。 ​ 为什么这么快 &#xff1f; js是单线程串行&#xff0c;esbuild是新开一个进程&#xff0c;然后多线程并行&#xff0c;充分发挥多核优势 go是纯机器码&#xff0c;肯…

Linux:gcc的基本知识

gcc 是一个将C语言文件变成可执行文件的工具。 在Linux中&#xff0c;如果需要将一个C语言文件变得可以执行&#xff0c;那么除了这个文件本身的内容是C语言编写的内容外&#xff0c;还需要gcc这个编译工具进行编译才行。 gcc 使用的格式方法:gcc 要编译的文件 //在该代码下…

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022

基于机器学习的青藏高原高寒沼泽湿地蒸散发插补研究_王秀英_2022 摘要关键词 1 材料和方法1.1 研究区概况与数据来源1.2 研究方法 2 结果和分析2.1 蒸散发通量观测数据缺省状况2.2 蒸散发与气象因子的相关性分析2.3 不同气象因子输入组合下各模型算法精度对比2.4 随机森林回归模…

第2.5章 StarRocks表设计——行列混存表

注&#xff1a;本篇文章阐述的是StarRocks- 3.2.3版本的行列混存表 一、概述 1.1 背景 StarRocks 基于列存格式引擎构建&#xff0c;在高并发场景&#xff0c;用户希望从系统中获取整行数据。当表宽时&#xff0c;列存格式将放大随机IO和读写。自3.2.3开始&#xff0c;StarRo…