接上文:微信小程序开发06-一个业务页面的完成

github地址:https://github.com/yexiaochai/wxdemo

我们首页功能基本完成,我对比了下实际工作中的需求,完成度有70%以上,如果再花一两天时间,便能跟之前工作做的差不多了,今天我们继续实现一个页面列表,便结束这次的学习,后面几天要出差,所以总结性的文章本周未必能出来,静待下周吧。

这里考虑demo复杂度,列表页功能完成度也仅仅完成主功能模块,与真实工作完成度对比60%左右吧,于是我们开始愉快的代码,首先是将我们的页面样式实现:

 <view class="page-wrapper ">
<view class="bus-list js_bus_list ">
<view data-supplierid="100020" data-key="" class="bus-list-item ">
<view class="bus-time"> 08:25</view>
<view class="tobooking"> 预订 </view>
<view class="detail">
<view class="detail1">
<view class="start">
<text class="icon-circle s-icon1"></text>东莞市南城汽车客运站</view>
<view class="end">
<text class="icon-circle s-icon2"></text>连州</view>
</view>
<view class="tags">
<view>
<text class="price">¥135</text>
</view>
<view>
<text class="countleft">10张</text>
</view>
<view>
<text class="b-tags js_tags"></text>
</view>
</view>
</view>
</view>
</view> <view class="bus-list js_bus_list ">
<view data-supplierid="100020" data-key="" class="bus-list-item ">
<view class="bus-time"> 08:25</view>
<view class="tobooking"> 预订 </view>
<view class="detail">
<view class="detail1">
<view class="start">
<text class="icon-circle s-icon1"></text>东莞市南城汽车客运站</view>
<view class="end">
<text class="icon-circle s-icon2"></text>连州</view>
</view>
<view class="tags">
<view>
<text class="price">¥135</text>
</view>
<view>
<text class="countleft">10张</text>
</view>
<view>
<text class="b-tags js_tags"></text>
</view>
</view>
</view>
</view>
</view>
<view class="bus-list js_bus_list ">
<view data-supplierid="100020" data-key="" class="bus-list-item ">
<view class="bus-time"> 08:25</view>
<view class="tobooking"> 预订 </view>
<view class="detail">
<view class="detail1">
<view class="start">
<text class="icon-circle s-icon1"></text>东莞市南城汽车客运站</view>
<view class="end">
<text class="icon-circle s-icon2"></text>连州</view>
</view>
<view class="tags">
<view>
<text class="price">¥135</text>
</view>
<view>
<text class="countleft">10张</text>
</view>
<view>
<text class="b-tags js_tags"></text>
</view>
</view>
</view>
</view>
</view> <include src="../mod/calendar.wxml" />
<include src="../../utils/abstract-page.wxml" /> </view>
 .page-wrapper {
margin: 0;
font-size: 28rpx;
line-height: 1.5;
color: #333;
background-color: #efefef;
overflow-x: hidden;
-webkit-overflow-scrolling: touch;
-webkit-tap-highlight-color: transparent;
min-height:2000rpx;
} .bus-list .bus-list-item {
position: relative;
height: 160rpx;
background-color: #fff;
margin: 16rpx 0;
border: 2rpx solid #e5e5e5;
border-width: 2rpx 0;
} .bus-list .bus-list-item::before,.bus-list .bus-list-item::after {
position: absolute;
left: 122rpx;
content: '';
width: 24rpx;
height: 12rpx;
background-color: #efefef;
border: 2rpx solid #e5e5e5;
} .bus-list .bus-list-item::before {
border-radius: 0 0 60rpx 60rpx;
border-top: none;
top: -2rpx;
} .bus-list .bus-list-item::after {
border-radius: 60rpx 60rpx 0 0;
border-bottom: none;
bottom: -2rpx;
} .bus-list .bus-list-item .bus-time {
position: absolute;
left: 0;
width: 134rpx;
height: 100rpx;
line-height: 100rpx;
margin: 30rpx 0;
color: #00b358;
text-align: center;
font-size: 40rpx;
font-family: Arial;
border-right: 2rpx dashed #e5e5e5;
} .bus-list .bus-list-item .tobooking {
background-color: #00B358;
position: absolute;
right: 0;
width: 120rpx;
height: 160rpx;
line-height: 160rpx;
text-align: center;
color: #fff;
font-size: 30rpx;
} .bus-list .bus-list-item.disabled .tobooking {
background-color: #c5c5c5;
} .bus-list .bus-list-item .detail {
height: 80rpx;
padding: 36rpx 0;
margin: 0 140rpx 0 144rpx;
} .bus-list .bus-list-item .detail .sub-list{
height: 52rpx;
} .bus-list .bus-list-item .start, .bus-list .bus-list-item .end {
color: #333333;
font-size: 26rpx; } .bus-list .bus-list-item .price {
font-family: Arial;
color: #fd8f01;
font-size: 32rpx;
font-weight: 600;
} .bus-list .bus-list-item.disabled .ticket {
display: none;
} .bus-list .bus-list-item .ticket {
color: #fd8f01;
font-size: 24rpx;
border: 2rpx solid #fd8f01;
padding: 2rpx 8rpx;
border-radius: 10rpx;
font-family: Arial;
} .bus-list .bus-list-item.disabled .ticket {
color: #c5c5c5;
} .bus-list .bus-list-item .s-icon1 {
margin: 0 10rpx;
border-color: #00B358;
} .bus-list .bus-list-item .s-icon2 {
margin: 0 10rpx;
border-color: #f06463;
} .bus-list .bus-list-item .tags {
width: 160rpx;
text-align: right;
position: absolute;
right: 0;
margin-right: 138rpx;
margin-top: 34rpx;
top: 0;
}

轻轻松松完成了页面主体布局:

然后这里需求请求数据,所以我们去设置一个请求实体:

 class ListModel extends DemoModel {
constructor() {
super();
this.url = '/schedule/list';
}
} module.exports = {
cityModel: new CityModel,
city2Model: new City2Model,
listModel: new ListModel }

开始请求参数:

 onLoad: function (data) {
let scope = this; if(!data || !data.sid || !data.aid || !data.date) {
this.showToast('参数错误');
return
} this.index = 0;
let listModel = models.listModel; listModel.setParam({
startcityid: data.sid,
arrivalcityid: data.aid,
startdatetime: data.date / 1000,
page: this.index + 1
}); this.showLoading();
listModel.execute(function(data) {
scope.hideLoading();
scope._appendList(data.schedules); }); }

接下来的工作便是渲染页面即可,如果不考虑细节,只是做demo,真的很轻易呢:)

 //获取公共ui操作类实例
const _page = require('../../utils/abstract-page.js');
let modCalendar = require('../mod/calendar.js');
const models = require('../../data/demo-model.js')
const util = require('../../utils/util.js') //获取应用实例
const app = getApp() Page(_page.initPage({
data: {
listData: []
},
// methods: uiUtil.getPageMethods(),
methods: {
}, goIndex: function () { wx.navigateTo({
url: '../index/index'
})
},
onShow: function () {
global.sss = this;
let scope = this;
}, _appendList: function (data) { for(let i = 0, len = data.length; i < len; i++) {
data[i].dateStr = util.dateUtil.format(new Date(data[i].datetime * 1000), 'H:F' )
} this.setData({
listData: this.data.listData.concat(data)
});
}, onLoad: function (data) {
let scope = this; if(!data || !data.sid || !data.aid || !data.date) {
this.showToast('参数错误');
return
} this.index = 0;
let listModel = models.listModel; listModel.setParam({
startcityid: data.sid,
arrivalcityid: data.aid,
startdatetime: data.date / 1000,
page: this.index + 1
}); this.showLoading();
listModel.execute(function(data) {
scope.hideLoading();
scope._appendList(data.schedules); }); }
}, {
modCalendar: modCalendar
}))
 <view class="page-wrapper ">
<view class="calendar-bar-wrapper js_calendar_wrapper">
<view class="bus-tabs calendar-bar">
<view class="tabs-item js_pre_day">前一天</view>
<view class="tabs-item js_show_calendar" style="-webkit-flex: 2; flex: 2;">2018-8-6 周一(明天)</view>
<view class="tabs-item js_next_day">后一天</view>
</view>
</view>
<view class="bus-list js_bus_list "> <block wx:for="{{listData}}" wx:key="k">
<view class="bus-list-item ">
<view class="bus-time">{{item.dateStr}}</view>
<view class="tobooking"> 预订 </view>
<view class="detail">
<view class="detail1">
<view class="start">
<text class="icon-circle s-icon1"></text>{{item.startstationname}}</view>
<view class="end">
<text class="icon-circle s-icon2"></text>{{item.arrivalstationname}}</view>
</view>
<view class="tags">
<view>
<text class="price">¥{{item.price / 100}}</text>
</view>
<view>
<text class="countleft">{{item.cansellcountamount}}张</text>
</view>
<view>
<text class="b-tags js_tags"></text>
</view>
</view>
</view>
</view> </block> </view> <include src="../mod/calendar.wxml" />
<include src="../../utils/abstract-page.wxml" /> <view class="bus-list js_bus_list " ontap="goIndex">
去首页
</view>
</view>

最后,我们完善一下这里日期相关操作,便暂时结束这次学习:

列表页的一些总结

我们做小程序相关学习有快两周了,完成了一个简单的demo,项目还是有一定复杂度,感觉上还是比较适合做小程序了解的,但是也有一些问题,比如写到后面事实上更多是业务的东西了,业务会涉及很多细节体验,需要耗时费力,比如今天的列表业务,显然就偷懒了,代码质量也没怎么关注,事实上大家可以思考一些问题,这里还差很多功能:

① 滚动加载

② 列表各种状态

③ ......

事实上,列表页是常用的一种业务页面,虽然各种列表页的筛选条件不一样,但是主体功能无非都是:

① 列表渲染

② 滚动加载

③ 条件筛选、重新渲染

所以说我们其实可以将其做成一个页面基类,跟abstract-page一个意思,这里留待我们下次来处理吧,借此我们微信小程序的学习教程就此结束,我后面几天总结下前面所学整理一个博客出来,帮助各位更好的了解

微信小程序开发07-列表页面怎么做的更多相关文章

  1. 微信小程序开发-新闻列表之新闻列表绑定

    微信小程序开发-新闻列表之新闻列表绑定开发教程: 1.效果图预览 2.准备工作 在拿到效果图后不要先急着去写代码,而是要去分析一下页面的整体结构,用什么方式定位和布局.小程序里建议使用flex布局,因 ...

  2. 转载【小程序】: 微信小程序开发---应用与页面的生命周期

    App App() App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. object参数说明: 属性 类型 描述 触发时机 onLaunch Functi ...

  3. 微信小程序开发 [07] 写在后面的话

    写在后面的话基本算是吐槽了,在学完小程序的课程之后,我用博客园的api,写了个闪存的小程序,本来兴致勃勃甚至这篇是准备写"我的第一个小程序发布啦",然而并没有. 不是说我偷懒了没写 ...

  4. 微信小程序开发 -- 获取当前页面路径

    Page.prototype就是this: 你在任何一个Page里面都可以使用route字段和setData()函数: 示例代码: /** * 生命周期函数--监听页面加载 */ onLoad: fu ...

  5. 微信小程序开发06-一个业务页面的完成

    前言 接上文:微信小程序开发05-日历组件的实现 github地址:https://github.com/yexiaochai/wxdemo 这里来说一说我们的理念,我们也学习小程序开发有一周多了,从 ...

  6. 微信小程序开发系列七:微信小程序的页面跳转

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  7. 微信小程序开发--页面结构

    一.微信小程序开发--页面文件组成 [page.name].js 页面逻辑文件,用于创建页面对象,以及处理页面生命周期控制和数据处理 [page.name].wxml wxml指的是Wei Xin M ...

  8. 微信小程序开发:学习笔记[8]——页面跳转及传参

    微信小程序开发:学习笔记[8]——页面跳转及传参 页面跳转 一个小程序拥有多个页面,我们可以通过wx.navigateTo推入一个新的页面.在首页使用2次wx.navigateTo后,页面层级会有三层 ...

  9. 【微信小程序开发】页面配置

    app下的app.json文件是全局配置. app下的每一个page中,也可以配置.json文件. page中配置的内容是对应app中window配置项下的内容. page中的配置将覆盖window中 ...

随机推荐

  1. compact_op.go

    package clientv3 import (     pb "github.com/coreos/etcd/etcdserver/etcdserverpb" ) // Com ...

  2. 【BZOJ 2744】【HEOI2012】朋友圈

    题目链接: TP 题解: 对于A国,我们发现,最大团一定不大于2.对于B国,发现同奇偶性点之间都有边,不同奇偶性之间可能有边,也就是说对于B国是一个二分图最大团,也就是求B国补图的二分图最大独立集.然 ...

  3. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  4. js的赋值问题:值传递还是引用传递?

    ECMAScript中有5种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number和String.还有1种复杂数据类型--Object,Object本质上是由一 ...

  5. Pandas之groupby( )用法笔记

    groupby官方解释 DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True ...

  6. 【爆料】-《南澳大学毕业证书》UniSA一模一样原件

    ☞南澳大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归&a ...

  7. 阿里开源分布式事务解决方案 Fescar

    微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并 ...

  8. Appscan 工具快速上手教程

      1.appscan扫描 (1)白盒扫描=静态扫描,扫描源代码.(2)动态扫描=黑盒扫描,用工具来模拟黑客的攻击,查看应用层的响应.产品内部会有大量受攻击的库,当我们把一个模拟攻击发给我们的应用的时 ...

  9. WebRTC系列(1)-手把手教你实现一个浏览器拍照室Demo

    1.WebRTC开发背景 由于业务需求,需要在项目中实现实时音视频通话功能,之前基于浏览器开发的Web项目要进行音视频通话,需要安装flash插件才能实现或者使用C/S客户端进行通信.随着互联网技术的 ...

  10. Java进阶篇设计模式之十 ---- 访问者模式和中介者模式

    前言 在上一篇中我们学习了行为型模式的解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern).本篇则来学习下行为型模式的两个模式,访问者模式(Visito ...