用uni-app写一个简单的豆瓣电影微信小程序
如题,这个项目是用
uni-app
写的,只有一个列表页,没有详情页。
截图
首页
选择标签
搜索列表
封装api
./api/api
// 定义基本URL
const BASE_URL = 'https://movie.douban.com/j/';// 封装请求
const request = (url, method, data) => {return new Promise((resolve, reject) => {wx.request({url: BASE_URL + url,method: method,data: data || {},header: {Accept: "application/json",'Content-Type': 'application/x-www-form-urlencoded'},success(request) {resolve(request.data)},fail(error) {reject(error)},complete(res) {console.log('loading completed');}})})
}// 扩展 promise 的 finally 方法
Promise.prototype.finally = function (callback) {let P = this.constructor;return this.then(value => {P.resolve(callback()).then(() => value);},reason => {P.resolve(callback()).then( () => { throw reason });});
}// 导出接口
module.exports = {// 标签列表search_tags(params){return request('search_tags','get', params);},// 电影列表search_subjects(params){return request('search_subjects','get', params);},// 搜索列表subject_suggest(params){return request('subject_suggest','get', params);}
}
接口名 | URL | Method | Params |
---|---|---|---|
获取标签列表 | https://movie.douban.com/j/search_tags | GET | { type: ‘movie’, source: ‘index’ } |
获取电影列表 | https://movie.douban.com/j/search_subjects | GET | { type: ‘movie’, tag: ‘热门’, page_limit: 9, page_start: 0 } |
搜索电影列表 | https://movie.douban.com/j/subject_suggest | GET | { q: ‘沙’ } |
只用到这三个接口。
列表都能找到接口,但是始终找不到详情的接口,豆瓣电影官网的详情页面是服务端渲染整个页面(目前为止),所以先不做详情页,原本也只是随便做的demo。
./pages/index/index 首页代码
<template><view class="container"><view class="section"><SearchInput @search="getSubjectSuggest" /><uni-list v-if="suggest_list.length>0"><uni-list-item v-for="item in suggest_list":key="item.id":title="item.title" :note="item.sub_title" :thumb="item.img"thumb-size="lg" :rightText="item.year"></uni-list-item></uni-list><view class="uni-list"><view class="uni-list-cell"><view class="uni-list-cell-left"> 当前选择 </view><view class="uni-list-cell-db"><picker @change="bindPickerChange" :value="tags_key" :range="tags"><view class="uni-input">{{tags[tags_key]}}</view></picker></view></view></view></view><view><scroll-view :scroll-top="scrollTop" scroll-y="true" class="scroll-Y" @scrolltoupper="upper" @scrolltolower="lower"@scroll="scroll"><uni-grid :column="3" :showBorder="false"><uni-grid-item class="uni-grid-item"style="height: 200px;"v-for="item in list":key="item.id"><view class="uni-grid-item-view" @click="goDetail(item)"><image style="width: 100%; height: 100px; background-color: #eee;" mode="scaleToFill" :src="item.cover"@error="imageError"></image><text class="">{{item.title}}</text><uni-rate :size="10" :max="5" :value="item.rate/2" /> {{item.rate}}</view></uni-grid-item></uni-grid></scroll-view></view></view>
</template><script>import { search_tags, // 标签列表search_subjects, // 电影列表subject_suggest // 搜索列表} from '../../api/api';import { SearchInput } from '../../components/SearchInput.vue';export default {name:'index',data() {return {tags:[],tags_key: 0,scrollTop: 0,old: {scrollTop: 0},list: [],key: 0,page_start: 0,suggest_list: []}},components:{SearchInput},async onShow() {wx.showLoading({title: 'Now Loading...',});this.page_start = 0;let res = await search_tags({type: 'movie',source: 'index'});console.log(JSON.stringify(res));this.tags = res.tags;this.search_subjects();wx.hideLoading();},methods: {inject(e){console.log(e);},setActive(){ },// 改变标签bindPickerChange(e) {console.log('picker发送选择改变,携带值为', e.detail.value);this.tags_key = e.detail.value;this.page_start = 0;this.search_subjects();},upper(e) {console.log(e)},lower(e) {console.log(e)},scroll(e) {console.log(e)this.old.scrollTop = e.detail.scrollTop},imageError(e) {console.error('image发生error事件,携带值为' + e.detail.errMsg)},// 跳转到详情页goDetail(item){console.log(uni.navigateTo);uni.navigateTo({url: `/pages/detail/detail?id=${item.id}`});},// 获取搜索建议列表async getSubjectSuggest(q){let res = await subject_suggest({q});console.log(JSON.stringify(res));this.suggest_list = res;},// 获取电影列表async search_subjects(){let res = await search_subjects({type: 'movie',tag: this.tags[this.tags_key],page_limit: 9,page_start: this.page_start++});console.log(JSON.stringify(res));this.list = res.subjects;}}}
</script><style lang="scss" scoped>$rem: 37.5;.container {padding: 20rem/$rem;font-size: 16rem/$rem;.section{margin-bottom: 30rem/$rem;}.uni-grid-item{.uni-grid-item-view{padding: 5rem/$rem;}}}
</style>
./components/SearchInput 用到了一个搜索框组件
<template><view><uni-search-bar @confirm="search" @input="input"></uni-search-bar></view>
</template><script>export default {name: "SearchInput",data() {return {};},async onShow() {},methods:{search(val){console.log(val);this.$emit('search',val.value);},input(val){console.log(val);if(val===''){this.$emit('search','');}}}}
</script>
只是这么多内容,可以把自己的 AppId
放到 manifest.json
中。也可以扩展内容,做一个电视剧列表,相关接口在豆瓣电影官网都能找到。
项目地址:https://codechina.csdn.net/sonicwater1/uni-app-demo
用uni-app写一个简单的豆瓣电影微信小程序相关推荐
- 写一个音乐播放器的微信小程序
要创建一个音乐播放器的微信小程序,您需要熟悉微信小程序的开发环境和语言(如 JavaScript 和 WXML/WXSS). 具体来说,您需要做以下几件事: 设计音乐播放器的用户界面,并使用 WXML ...
- 用uni-app写一个使用高德地图的微信小程序
目录 参考文档 一.准备工作 1.申请小程序key 2.微信公众平台配置合法域名 3.配置mainfest.json 4.使用到的微信小程序插件,基础类 二.开发中遇到的问题 1.无效的 app.js ...
- 使用微信开发工具制作一个简单的古诗词展示微信小程序
效果截图: 1.运行环境:微信开发者工具 2.数据准备:博主是使用Mock进行存储模拟数据 Mock数据准备格式如下: {"code": 0,"data": { ...
- 一个简单的银行存取款小程序
一个简单的银行存取款小程序 来由 银行存取款程序 程序功能 程序主体 后期改进内容 来由 2019年3月17晚,心血来潮想学习编程,向着一个伟大的程序员的方向出发.在我贫穷的知识库中,所了解到的编程语 ...
- 做一个派发工单的微信小程序
要制作一个派发工单的微信小程序,需要以下步骤: 了解微信小程序的开发环境和技术栈,比如微信小程序的前端语言.后端语言.数据存储方式等. 设计应用的功能需求,包括工单的创建.分配.执行和查询等. 根据功 ...
- ipad php mysql_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 一个Android开发者眼中的微信小程序
前言 转眼间微信小程序已经推出好几个年头了,作为一名Android开发者,一直想尝试下:正好赶上公司策略调整,在开发完App后领导想着在开发一个小程序版,基于微信庞大的用户量,微信小程序成为了首选:在 ...
最新文章
- 第二篇:数据可视化 - 基本API
- 2017 宋星大课堂福利赠票公布结果
- Oracle入门(五C)之68个系统变量的key和默认value
- linux-数据库篇-索引
- 7-10 A-B (20 分)
- DTC精彩回顾—王义成:国产数据库技术发展的探索与思考
- windows安装mysql-8.0.12-winx64和Navicat客户端连接(亲测有效)
- win10下安装mysql5.7.16(解压缩版)
- canvas图形处理和进阶用法
- 13. 在O(1)时间删除链表节点(C++版本)
- vc++无进程式线程插入穿墙技术实现
- dubbo入门级梳理
- java复杂的代码做程序_摆脱复杂烧脑的程序代码,利用快速开发平台轻轻松松做软件...
- 蓝桥杯单片机组经验分享之(三)各模块用法(1)138译码器
- 三层交换机如何配置为网关
- mysql查询前100个_mysql查询前100条数据
- 解决IE11无法下载文件的问题
- ESP32 学习笔记(七)I2S - Inter—IC Sound
- 《指数基金投资指南》笔记整理
- RoI Pooling 和 RoI Align
热门文章
- 西门子plc,经典双泵变频恒压供水
- Android APK脱壳--腾讯乐固、360加固一键脱壳 亲测可用
- http模块中----------req请求对象-req.url req.method 与客户端请求相关
- 【数字视频技术介绍】| 编码中的时间冗余和空间冗余
- python 下载百度音乐
- hd audio驱动
- win7计算机双击变管理,win7系统双击“计算机”打不开的解决方法
- ST7735-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
- 手摸手教你用php的post方法接入百度翻译API(免费版)
- Q620D高强板抗拉屈服强度及Q620D厚度方向抗撕裂性能