微信小程序 项目实战(三)list 列表页 及 item 详情页
1.项目结构
2.list 列表页
(1)数据(逻辑)
list.js
// pages/list/list.js
Page({ /**
* 页面的初始数据
*/
data: {
title: '加载中...', // 状态
list: [], // 数据列表
type: '', // 数据类型
loading: true // 显示等待框
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) { // options 为 board页传来的参数
const _this = this;
// 拼接请求url
const url = 'https://api.douban.com/v2/movie/' + options.type;
// 请求数据
wx.request({
url: url,
data: {},
header: {
'content-type': 'json' // 默认值
},
success: function(res) {
console.log(res.data);
// 赋值
_this.setData({
title: res.data.title,
list: res.data.subjects,
type: options.type,
loading: false // 关闭等待框
})
}
})
}
})
(2)页面布局
list.wxml
<!--pages/list/list.wxml-->
<!--列表页-->
<view class='container'>
<!--等待框-->
<loading hidden="{{!loading}}">加载中...</loading>
<!--顶部标题栏-->
<view class='page-header'>
<text class='page-title'>{{title}}</text>
</view>
<!--列表-->
<view class='page-body' wx:for="{{list}}" wx:key="id">
<!--类型判断,显示不同的数据-->
<block wx:if="{{type === 'us_box'}}">
<navigator url='../item/item?id={{item.subject.id}}'>
<view class='item'>
<image class='poster' src='{{item.subject.images.small}}'></image>
<view class='meta'>
<text class='title'>{{item.subject.title}}</text>
<text class='sub-title'>{{item.subject.original_title}}({{item.subject.year}})</text>
<view class='artists'>
<text>导演:</text>
<text wx:for="{{item.subject.directors}}" wx:key="id">{{item.name}}</text>
</view>
<view class='rating'>
<text>{{item.subject.rating.average}}</text>
</view>
</view>
</view>
</navigator>
</block>
<!--另一种情况-->
<block wx:else>
<navigator url='../item/item?id={{ item.id }}'>
<view class='item'>
<image class='poster' src='{{item.images.small}}'></image>
<view class='meta'>
<text class='title'>{{item.title}}</text>
<text class='sub-title'>{{item.original_title}}({{item.year}})</text>
<view class='artists'>
<text>导演:</text>
<text wx:for="{{item.directors}}" wx:key="id">{{item.name}}</text>
</view>
<view class='rating'>
<text>{{item.rating.average}}</text>
</view>
</view>
</view>
</navigator>
</block>
</view>
</view>
(3)样式
list.wxss
/* pages/list/list.wxss */
.page-header {
display: flex;
justify-content: center;
border-bottom: 1rpx solid #ccc;
}
.page-title {
padding: 20rpx 40rpx;
color: #999;
font-size: 38rpx;
text-align: center;
}
.page-body {
display: flex;
flex: 1;
flex-direction: column;
}
.item {
display: flex;
padding: 20rpx 40rpx;
border-bottom: 1rpx solid #eee;
cursor: pointer;
}
.item .poster {
width: 128rpx;
height: 128rpx;
margin-right: 20rpx;
}
.item .meta {
flex: 1;
}
.item .meta .title,.item .meta .sub-title {
display: block;
margin-bottom: 15rpx;
}
.item .meta .title {
font-size: 32rpx;
}
.item .meta .sub-title {
font-size: 22rpx;
color: #c0c0c0;
}
.item .meta .artists {
font-size: 26rpx;
color: #999;
}
.item .rating {
font-size: 28rpx;
font-weight: bold;
color: #f74c31;
}
.tips {
font-size: 28rpx;
text-align: center;
padding: 50rpx;
color: #ccc;
}
.tips image {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
}
.tips image,.tips text {
vertical-align: middle;
}
(4)效果图
3.item 详情页
(1)数据(逻辑)
item.js
// pages/item/item.js
Page({ /**
* 页面的初始数据
*/
data: {
title: '',
loading: true,
movie: {}
}, /**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
const _this = this;
// 拼接请求url
const url = 'https://api.douban.com/v2/movie/subject/' + options.id;
// 请求数据
wx.request({
url: url,
data: {},
header: {
'content-type': 'json' // 默认值
},
success:function(res) {
// 赋值
_this.setData({
movie: res.data,
loading: false // 隐藏等待框
})
}
})
}, /**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
// 修改导航栏标题
wx.setNavigationBarTitle({
title: this.data.title + '<<电影<<豆瓣'
})
}
})
(2)页面布局
item.wxml
<!--pages/item/item.wxml-->
<!--详情页-->
<!--等待框-->
<loading hidden="{{!loading}}">加载中...</loading>
<!--滚动列表-->
<scroll-view scroll-y="true" wx:if="{{movie.title}}">
<view class='meta'>
<image class='poster' src='{{movie.images.large}}' background-size="cover"></image>
<text class='title'>{{movie.title}}({{movie.year}})</text>
<text class='info'>评分:{{movie.rating.average}}</text>
<text class='info'>导演:<block wx:for="{{movie.directors}}" wx:key="id">{{item.name}}</block></text>
<text class='info'>主演:<block wx:for="{{movie.casts}}" wx:key="id">{{item.name}}</block></text>
</view>
<view class='summary'>
<text class='label'>摘要:</text>
<text class='content'>{{movie.summary}}</text>
</view>
</scroll-view>
(3)样式
item.wxss
/* pages/item/item.wxss */
.meta {
display: flex;
flex-direction: column;
align-items: center;
height: 1000rpx;
padding: 50rpx 40rpx;
}
.poster {
width: 80%;
height: 80%;
margin: 20rpx;
}
.title {
font-size: 42rpx;
color: #444;
}
.info {
font-size: 18rpx;
color: #888;
margin-top: 20rpx;
width: 80%;
}
.summary {
width: 80%;
margin: 30rpx auto;
}
.label {
display: block;
}
.content {
color: #666;
font-size: 20rpx;
padding: 10rpx;
}
(4)效果图
微信小程序 项目实战(三)list 列表页 及 item 详情页的更多相关文章
- 微信小程序项目实战之天气预报
概述 微信小程序项目实战之天气预报 详细 代码下载:http://www.demodashi.com/demo/10634.html 一.准备工作 1.注册微信小程序 2.注册和风天气账号 3.注册百 ...
- 微信小程序项目实战之豆瓣天气
概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...
- 微信小程序项目实战 - 菜谱大全
1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...
- 微信小程序 项目实战(一)生命周期 配置服务器信息 splash启动页
步骤一:小程序 生命周期 //app.js App({ onLaunch: function () { //当小程序初始化完成时,会触发onLaunch(全局只触发一次) }, onShow: fun ...
- 微信小程序 项目实战(二)board 首页
1.项目结构 2.页面 (1)数据(逻辑) board.js // pages/board/board.js Page({ /** * 页面的初始数据 */ data: { imgWrap: [] } ...
- 《微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记1)WePY开发环境的安装
WePY的安装或更新都通过npm进行,全局安装或更新WePY命令行工具,使用以下命令: npm install wepy-cli -g 稍等片刻,成功安装后,即可创建WePY项目. 注意:如果npm安 ...
- 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架
Taro本身实现的情况类似于mpvue,mpvue的未来展望中也包含了支付宝小程序,现在的版本中,也可以使用不同的构建命令来构建出百度小程序的支持,如第10章所示,但是现在Taro先于mpvue实现了 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- 微信小程序开发01 --- 微信小程序项目结构介绍
一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...
随机推荐
- 最短路 || HDU 2066 一个人的旅行
本草的旅行故事(✺ω✺),可以从S个点中的任意一个开始,到达D个点中的任意一个,求最短路 *解法:把草儿的家记成点0,S个点与0的距离为0,然后spfa求最短路 又是改了一万次,①多组数据啊 ②改完多 ...
- 第4节 hive调优:2、数据倾斜
数据的倾斜: 主要就是合理的控制我们的map个数以及reduce个数 第一个问题:maptask的个数怎么定的???与我们文件的block块相关,默认一个block块就是对应一个maptask 第二个 ...
- luogu P1866 编号
题目描述 太郎有N只兔子,现在为了方便识别它们,太郎要给他们编号.兔子们向太郎表达了它们对号码的喜好,每个兔子i想要一个整数,介于1和Maxnumber[i]之间(包括1和Maxnumber[i]). ...
- centos7.x设置静态IP
本教程以centOs7.4为例: 1.点击虚拟机的[编辑]选项,选择[虚拟网络编辑器] 2.选择[VMnet8],然后点击[NAT设置] 3.记录[子网掩码]和[网关IP],后面会用到 4.进入终端, ...
- MySQL 8.0.12 基于Windows 安装教程
第一步:到MySQL官网下载安装包:https://dev.mysql.com/downloads/mysql/ 第二步:将下载好的安装包(mysql-8.0.12-winx64 .zip)解压到相应 ...
- mysql系列安装
Mysql的5种安装方法:1.yum/rpm安装(适合要求不高,并发不大,公司内部,企业内部一些应用场景)2.编译安装(在线高并发业务)3.二进制安装(编译安装后,使用自带工具打包,然后拷贝到相同平台 ...
- Feedback on Ch5 paper based on CFD-RANS
It is encouraging that you took the initiative to write this journal manuscript, but it needs a lot ...
- 【HIHOCODER 1037】 数字三角形
链接 问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国.美国人民的生活非常有意思,经常会有形形色色.奇奇怪怪的活动举办,这不,小Hi和小Ho刚 ...
- NGINX模块(二)
[Nginx标准HTTP模块] 一.HTTP核心模块 指令1:alias 语法:alias file-path|directory-path; 默认值:no 使用字段:location 说明:这个指令 ...
- angularjs ng-repeat下验证问题
angularjs验证要求name唯一,repeat情况,name 等通过${index}等绑定,也无法获取值 通过ng-from的方法,这样验证name重复也可以了. <ng-form nam ...