批改状态:未批改
老师批语:
今天主要学习了网络请求API,同时,开始抖音小程序项目,获取接口数据,然后将数据渲染在前台页面。
. 网络请求API wx.request 必要参数:url ;
. 如果post传值接收不到,必须把header里的content-type,改变为application/x-www-form-urlencoded
. 这里我们需要把网络请求方法作为共用代码放进js文件里,然后定义util对象给他post方法,传入参数that func 分别把引用页面的this 和 该页面处理数据的方法传入,然后通过网络请求api理的方法,成功时用相应的方法处理数据
. 最后把整个页面导出 用方法module.exports = util;
//公公代码//可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块var util = {};// 它有两个接收值,that,它就是个接收值的名字。它的值,是根据传入的值// fun 它就是个接收值的名字。它的值,是根据传入的值, 传入b,它的值就是butil.post = function(that,fun){// 如果post传值接收不到,必须把header里的content-type,改变为application/x-www-form-urlencoded// json数据,必须一次返回。也不能有其他的打印数据或输出数据。// var that = this;wx.request({url: 'http://www.ouyangke.com/douyin.php',data: {a: 'index'},method: 'POST',dataType: 'json',header: {// 'content-type': 'application/json','content-type': 'application/x-www-form-urlencoded'},success(e) {// 把page里的this,重新赋值,就不会给api里的this冲突了。// this.setData不能在api里使用。// 如果js文件里的data数据改变了,wxml里的数据会跟着改变。// 返回return是没用的// that 是什么?是接收值,它接收的是什么呢? 是传入方(2.js)的整个文件的(page)传过来了。 相当于 this// fun是什么? 是接收值,它接收的是方法名(b),就相当于this.b可以调用(2.js)里的b方法// this.b 相当于 调用(2.js)里的b方法// that[fun] 相当于 调用(2.js)里的b方法 that是this,[fun]相当于 .b// ()括号是传值,我们把接口得到的数据,给(2.js)里的b方法that[fun](e.data.data);}})}module.exports = util;
// pages/1/2.js
//引入外部就是文件
var ut = require(‘../../utils/util.js’);
Page({
/*** 页面的初始数据*/data: {dou: []},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {ut.post(this, 'b');},b: function(e){this.setData({dou: e})console.log(e);}
})
<!--pages/1/3.wxml--><!-- bindtap是将点击事件绑定在组件上 点击触发后面的方法 --><!-- data-后面可以跟自定义属性 然后可以将属性值传给后台 --><text bindtap="a" data-oo="jiji" style="color:red;">{{ name }}</text><input bindinput="b" style="margin:35px; border:1px solid blue"></input>
// pages/1/3.jsPage({/*** 页面的初始数据*/data: {name: 'php 中文网'},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},a: function(e) {// e下面的target下面的dataset下面的id是前台页面的自定义属性值// console.log(e.target.dataset.oo);console.log(e);},b:function(e) {this.setData({name:e.detail.value})// e下面detail下面的value是输入框的值// console.log(e.detail.value);}})
现在来做抖音小程序,首先通过接口获取数据,然后根据获取的数据在前端页面渲染出来。
首先引入公共js文件,然后用post方法连接端口
var com = require('../../utils/util.js');//监听页面加载完后onLoad: function () {com.post('douyin.php', {uid : uid}, 'getData', this);this.setData({windowHeight: wx.getSystemInfoSync().windowHeight //获取屏幕可使用高度})},getData: function(e) {// console.log(e.data);e.data[0].autoplay = true;this.setData({play: e.data})
post方法需要传入 获取接口的链接 然后传入的数据 获取接口数据后处理数据的回调函数 还有调用这个方法的页面
最后获取的数据赋给play
前端页面调用play里面相应的属性值,然后在前端渲染出来。
<!--index.wxml--><!-- 顶部固定数据 --><!-- 搜索图标 --><view style="position:fixed;left:30rpx;top:30rpx;z-index:9999;"><image class="top_img" src="../../img/search.png"></image></view><!-- 推荐和定位 --><view style="text-align:center;width:100%;position:fixed;top:30rpx;z-index:9999;color:#fff;"><text space="emsp" decode="true" style="font-size:30rpx;">推荐 </text><text space="emsp" decode="true" style="font-size:18rpx;"> | </text><text space="emsp" decode="true" style="font-size:24rpx;"> 合肥</text></view><!-- 二维码图标 --><view style="position:fixed;right:100rpx;top:30rpx;z-index:9999;"><image class="top_img" src="../../img/scan.png"></image></view><!-- live图标 --><view style="position:fixed;right:30rpx;top:30rpx;z-index:9999;"><image class="top_img" src="../../img/live.png"></image></view><!-- 滑块视图容器 vertical纵向 indicator-dots不显示面板 autoplay不自动切换 --><!-- height 滑块试图高度,根据手机屏幕高度,动态设置 --><swiper vertical="true" indicator-dots="" autoplay="" style="height:{{windowHeight}}px;" bindchange="edit_v"><!-- swiper-item 每个单元滑动容器 --><!-- wx:for循环js里的数据 wx:key先阶段用不到,防止有黄色错误,不给值 item-id="{{item.id}}" --><swiper-item wx:for="{{play}}" wx:key="id" wx:for-index="key"><view style="text-align:center;width:100rpx;position:fixed;right:10rpx;bottom:{{windowHeight/3}}rpx;z-index:9999;"><!-- 头像,关注按钮 --><view><image class="avatar" src="{{item.user.avatar}}"></image><image style="width:30rpx;height:30rpx;" src="../../img/follow.png"></image></view><!-- 点赞按钮 --><image wx:if="{{item.is_zan == 0}}" class="right_img" src="../../img/love.png" bindtap="zan" data-id="{{item.id}}" data-key="{{key}}"></image><!-- 点赞成功按钮 --><image wx:if="{{item.is_zan == 1}}" class="right_img" src="../../img/love_on.png"></image><view class="text">{{item.zan_number}}</view><!-- 消息按钮 --><image class="right_img" src="../../img/com.png" bindtap="b" data-id="{{item.id}}" data-key="{{key}}"></image><view class="text">{{item.msg_number}}</view><!-- 转发按钮 --><image class="right_img" src="../../img/forwa.png"></image><view class="text">{{item.forward}}</view></view><!-- 视频 --><video id="video_{{key}}" autoplay="{{item.autoplay}}" initial-time="{{item.initial}}" controls="" class="wh100" src="{{item.video}}" bindtap="z" bindended="g"></video><!-- 标题、内容、歌曲 --><view style='position:fixed;left:30rpx;bottom:10rpx;z-index:9999;color:#fff;font-size:28rpx;width:80%;'><view style="margin-bottom:10rpx;">@<span style="font-size:34rpx;">{{item.user.nickname}}</span></view><view style="margin-bottom:10rpx;">{{item.conten}}</view><view class='box'><view class='flex-box' style='left: {{posLeft2}}px;'><view id='txt3' class='txt'>{{item.audio.title}}</view><view class='txt' style='margin-left: {{marginLeft}}px'>{{item.song}}</view></view></view></view><!-- 歌曲文字,前面的抖音logo --><image style='width:20rpx;height:20rpx;position:fixed;left:30rpx;bottom:40rpx;z-index:99999;' src="../../img/dou.png"></image><!-- 旋转图片 --><image style='border-radius:50%;width:100rpx;height:100rpx;position:fixed;right:30rpx;bottom:40rpx;z-index:99999;' src='{{item.audio.url}}' class='img' animation="{{animationData}}"></image></swiper-item></swiper><!-- 弹框 评论 --><view style="position:fixed;bottom:0rpx;" wx:if="{{is_p == 1}}"><input style="width:720rpx;background-color:#fff;padding:20rpx;" placeholder="有爱评论,说点儿好听的~" focus="true" bindinput="i"></input><view><button type="default" style='width:50%;float:left;' bindtap="c">取消</button><button type="primary" style='width:50%' bindtap="d">确定</button></view></view>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号