热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序实现列表页面及上拉加载功能

微信小程序实现列表页面及上拉加载功能mygod,离上篇博客的时间竟然过去将近四个月了。我呢,有幸从一个Android小白变成了一个前端小白--这周开始学习微信小程序啦大概是1月份

微信小程序实现列表页面及上拉加载功能

my god,离上篇博客的时间竟然过去将近四个月了。
我呢,有幸从一个Android小白变成了一个前端小白- -

这周开始学习微信小程序
大概是1月份开始听到最多的名词了。

废话不多说了
对,这篇还是我的笔记篇,哈哈哈。

涉及到的内容有

  • 列表渲染 即(wx:for)
  • 页面间传值(目前唯一会的一种)
  • 数据请求(wx.request)
  • 以及分页的实现

首先实现一个这样的页面(页面间传值)

classification.wxml代码


<block wx:for="
{{list}}">
<navigator url="../home/home?id=
{{item.channel_id}}" hover-class="navigator-hover">//id为要传的值的key,下个页面会用到
<image src="
{{item.avatar}}" class="pic">image>
<view class="right">
<text class="title">{{item.name}}text>
view>
navigator>
block>

classification.js

var list;
Page({
data:{},
onLoad:function(options){
// 页面初始化 options为页面跳转所带来的参数
this.setData({
list:list
})
}
})
wx.request({
url: 'test.php', //仅为示例,并非真实的接口地址
data: {},
method: 'GET', //必须为大写(例如:POST)
header: {
'content-type': 'application/json'
},
success: function(res){
// console.log(res.data);
list=res.data.data.list;
// id=res.data.data.list.channel_id;
// console.log(id);
}
})

我第一个页面就是这样写的- -
wxml中的navigator标签的属性url中的?后id={{item.channel_id}},即为要传的值,key是id,值是list的channel_id字段。如果有多个字段用&连接

然后在home.js中接收这个值,在onLoad中的参数options.key(我这里的key为id)就可以得到你上个页面传来的值

// pages/home/home.js
var id,url1,url2,list=[],that,data,listadd;
Page({
data:{},
onLoad:function(options){
// 页面初始化options为页面跳转所带来的参数
id=options.id; //options.id为上个页面传来的参数
that = this; //在请求数据时setData使用
url1="http://xxx"+id+"xxx"; //url拼接
queryRequest(url1);
//请求数据
function queryRequest(url){
wx.request({
url: url,
data: {},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function(res){
// success
console.log(res.data);
data = res.data.data;
list = res.data.data.list; //把取到的数组的值赋值给list
for(var i=0;i<list.length;i++){
var a=timeString(list[i].display_time);
list[i].time=a;
list[i].name=list[i].user.name;
list[i].headpic=list[i].user.avatar;
}
that.setData({ //这里调用setData时不能用this.setData,会报错
list:list
})
}
})/时间戳转换为时间
function timeString(time){
var newDate = new Date();
newDate.setTime(time);
// console.log(newDate.toLocaleDateString());
var result = newDate.toLocaleDateString();
return result;
}

可以把请求数据的接口写成一个函数,在onload中调用即可,可传参。
以上是关于页面传参的一个示例 其中有一个小知识点 之前做的时候也被卡了一下 就是在请求数据函数中调用setData()函数,不能用this,需要在onLoad中将this赋值给一个变量,我这里用的that,这个随意叫什么可以。
这里也用到了列表渲染wx:for,微信小程序API上介绍的挺清楚的,不懂的多看看,我是之前用过ionic,所以微信用到的数据绑定机制会比较熟悉一点

笔记二 被赋值后的list还能添加对象元素

再给自己贴一下代码- -记住: 被赋值后的list还能添加对象元素,甚至可以将自己的元素重新赋值给新创建的元素

//请求数据
function queryRequest(url){
wx.request({
url: url,
data: {},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function(res){
// success
console.log(res.data);
data = res.data.data;
list = res.data.data.list; //把取到的数组的值赋值给list
for(var i=0;i<list.length;i++){
var a=timeString(list[i].display_time);
list[i].time=a; //仍然可以添加time元素
list[i].name=list[i].user.name; //甚至可以将自己的元素重新赋值给新创建的元素
list[i].headpic=list[i].user.avatar;
}
that.setData({ //这里调用setData时不能用this.setData,会报错
list:list
})
}
})

笔记三 关于分页

知识点一:两个数组拼接,用concat()方法

    for(var i=0;i
var a=timeString(listadd[i].display_time);
listadd[i].time=a;
listadd[i].name=listadd[i].user.name;
listadd[i].headpic=listadd[i].user.avatar;
}
list = list.concat(listadd)

将listadd拼接到list数组中并赋值给list

分页的实现是利用scroll-view标签的下拉到底部回调函数实现
重新请求数据 并且将新的数据放入list中显示即可(数组拼接知识点)

最后贴出home.js和home.wxml的完整代码

// pages/home/home.js
var id,url1,url2,list=[],that,data,listadd;
Page({
data:{},
onLoad:function(options){
// 页面初始化 options为页面跳转所带来的参数
// this.setData({
// id:options.id //options.id是上个页面传来的参数 赋值给此js对应的html
// })
that = this;//在请求数据时setData使用
id=options.id;//options.id为上个页面传来的参数
// console.log(id)
url1="http://xxx"+id+"xxx";
queryRequest(url1);
},
lower: function(e){
url2=url2=url1+"&nt="+data.nt;
getmoreRequest(url2);
}
})

//请求数据
function queryRequest(url){
wx.request({
url: url,
data: {},
method: 'GET',
header: {
'content-type': 'application/json'
},
success: function(res){
// success
console.log(res.data);
data = res.data.data;
list = res.data.data.list;
// console.log(list);
for(var i=0;i<list.length;i++){
var a=timeString(list[i].display_time);
list[i].time=a;
list[i].name=list[i].user.name;
list[i].headpic=list[i].user.avatar;
// console.log(list[i])
// console.log(list[i].time)
}
that.setData({
list:list
})
}
})
}

//下拉加载的请求
function getmoreRequest(url){
wx.request({
url: url,
data: {},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
},
success: function(res){
// success
// console.log(res.data);
listadd = res.data.data.list
data = res.data.data
// list.post(listadd)
for(var i=0;i var a=timeString(listadd[i].display_time);
listadd[i].time=a;
listadd[i].name=listadd[i].user.name;
listadd[i].headpic=listadd[i].user.avatar;
}
list = list.concat(listadd)
// console.log(list)
console.log(list.length)
that.setData({
list:list
})
},
fail: function() {
// fail
},
complete: function() {
// complete
}
})
}

//时间戳转换为时间
function timeString(time){
var newDate = new Date();
newDate.setTime(time);
// console.log(newDate.toLocaleDateString());
var result = newDate.toLocaleDateString();
return result;
}

<scroll-view scroll-y="true" style="height:600px" bindscrolltolower="lower">
<block wx:for="{{list}}">
<view style="clear:both;">
<image src="{{item.headpic}}" class="img">image>
<view class="description">
<text>{{item.name}}text>
<view style="margin-top:20rpx">{{item.time}}view>
view>
view>
block>
scroll-view>

推荐阅读
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • MathJax.Hub.Config({showMathMenu:false}); ... [详细]
  • 近来终究做了第一个微信小顺序,是音乐类的运用,所以音乐播放器必不可少。由于运转环境的限定,没有现成的轮子,只能本身重新造一个了。功用清单基本功用:播放,停息,进度,住手扩大功用:播 ... [详细]
  • 微信小程序API音频-暂停播放是千自学中一篇关于微信小程序的文章简介:wx.pauseVoice(Objectobject)从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替暂停正在播放的语 ... [详细]
  • 微信小程序中如何实现轮播图
    这篇文章主要介绍了微信小程序中如何实现轮播图,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带 ... [详细]
  • 微信小程序实战之菜谱小程序
    最近突发奇想,想要自己搞个小程序玩儿玩儿,但是鉴于自己是搞后端服务器出身,对于偏前端的微信小程序开发实在是一知半解,尤其是对于css类样式相关,更是无从下手,于是乎,只能从晚上找了 ... [详细]
  • 微信小程序地图实现展示线路的方法
    这篇文章将为大家详细讲解有关微信小程序地图实现展示线路的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 深入解析微信小程序开发中的全局配置文件设置与优化技巧
    本文深入探讨了微信小程序开发中全局配置文件的设置与优化技巧,详细解析了 `app.js`、`app.json`、`app.wxss` 和 `project.config.json` 的功能与最佳实践。通过合理配置这些文件,开发者可以显著提升小程序的性能和用户体验。文章还介绍了如何利用这些配置文件进行模块化开发和调试,帮助开发者更好地管理和维护小程序项目。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • 在使用群报数小程序进行高效接龙与统计时,可以通过创建 `LinkedList` 对象并利用 `for` 循环生成指定数量的 `Person` 对象,为每个人员分配唯一的编号,并将其添加到 `LinkedList` 集合中。这一过程确保了数据的有序性和高效管理,便于后续的接龙和统计操作。此外,该小程序还支持实时更新和查看参与人员的状态,进一步提升了活动组织的便利性和准确性。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~黄文俊,现任腾讯云SCF无服务器云函数高级产品经理,多年企业级系统开发和架构工作经验,对企业级存储、容器平台、微服务架构、无服务器计 ... [详细]
author-avatar
手机用户2602938483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有