当前位置:   article > 正文

微信小程序--开启下拉刷新页面

微信小程序--开启下拉刷新页面

1、下拉刷新获取数据enablePullDownRefresh

开启下拉刷新:

enablePullDownRefreshbooleanfalse是否开启当前页面下拉刷新

案例: 

 下拉刷新,获取新的列表数据,其实就是进行一次新的网络请求

第一步:在.json文件中开启下拉刷新

  1. {
  2. "usingComponents": {},
  3. "enablePullDownRefresh":true,
  4. "backgroundColor": "#6D9AD6"
  5. }

第二步:在.js配置文件中找到下拉刷新处理函数:

  1. // pages/wxRequest/wxRequest.js
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {
  7. listArr:[]
  8. },
  9. /**
  10. * 生命周期函数--监听页面加载
  11. */
  12. onLoad(options) {
  13. this.getData();
  14. },
  15. getData(){
  16. wx.showLoading({
  17. title: '网络加载中...',
  18. mask:true//遮罩层,防止用户误触
  19. })
  20. wx.request({
  21. url: 'https://api.thecatapi.com/v1/images/search?limit=2',
  22. success:res=>{
  23. console.log(res)
  24. this.setData({
  25. listArr:res.data
  26. })
  27. //当网络请求完成后,我们要自动的把下拉刷新的样式关闭掉,要不然不好看:
  28. wx.stopPullDownRefresh()
  29. },
  30. complete:res=>{
  31. //无论网络请求是否成功,都要关闭loading样式:
  32. wx.hideLoading()
  33. }
  34. })
  35. },
  36. /**
  37. * 页面相关事件处理函数--监听用户下拉动作
  38. */
  39. onPullDownRefresh() {
  40. this.setData({
  41. //细节:其实我们下拉刷新后,应该先把页面清空,再获取新的数据:
  42. //只不过页面清空效果很快,肉眼看不太出来
  43. listArr:[]
  44. })
  45. this.getData();
  46. },

细节一:当网络请求完成后,我们要自动的把下拉刷新的样式关闭掉,要不然不好看:

  • wx.stopPullDownRefresh(Object object):停止当前页面下拉刷新;
  • wx.startPullDownRefresh(Object object):开始下拉刷新。调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
  1. /**
  2. * 页面相关事件处理函数--监听用户下拉动作
  3. */
  4. onPullDownRefresh() {
  5. //细节:其实我们下拉刷新后,应该先把页面清空,再获取新的数据:
  6. //只不过页面清空效果很快,肉眼看不太出来
  7. this.setData({
  8. listArr:[]
  9. })
  10. this.getData();
  11. },

细节二:在页面加载完毕前,应该添加一个wx.showLoading()提示用户正在加载,网络请求完成后,就关闭这个加载动作

                                

  1. getData(){
  2. wx.showLoading({
  3. title: '网络加载中...',
  4. mask:true//遮罩层,防止用户误触
  5. })
  6. wx.request({
  7. url: 'https://api.thecatapi.com/v1/images/search?limit=2',
  8. success:res=>{
  9. console.log(res)
  10. this.setData({
  11. listArr:res.data
  12. })
  13. //当网络请求完成后,我们要自动的把下拉刷新的样式关闭掉,要不然不好看:
  14. wx.stopPullDownRefresh()
  15. //当网络请求完成后,还要关闭loading样式:
  16. wx.hideLoading()
  17. }
  18. })
  19. },

 细节三:如果网络请求失败呢?例如接口失效:

successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
  1. getData(){
  2. wx.showLoading({
  3. title: '网络加载中...',
  4. mask:true//遮罩层,防止用户误触
  5. })
  6. wx.request({
  7. url: 'https://api.thecatapi.com/v1/images/search?limit=2',
  8. success:res=>{
  9. console.log(res)
  10. this.setData({
  11. listArr:res.data
  12. })
  13. //当网络请求完成后,我们要自动的把下拉刷新的样式关闭掉,要不然不好看:
  14. wx.stopPullDownRefresh()
  15. },
  16. complete:res=>{
  17. //无论网络请求是否成功,都要关闭loading样式:
  18. wx.hideLoading()
  19. }
  20. })
  21. },

2、触底加载更多的数据onReachBottom

在json文件中配置:

  1. {
  2. "usingComponents": {},
  3. "enablePullDownRefresh":true,
  4. "backgroundColor": "#6EB66E",
  5. "navigationStyle":"custom" ,
  6. "onReachBottomDistance":200
  7. }
  • 距离底部多少的时候触发我们的触底事件 默认是50px 
  • 触底加载更多的数据通常与这个api联合使用:导航栏有加载中的小圆圈wx.showNavigationBarLoading(Object object)
  • 在js中找到触底事件对应的处理函数:
  1. /**
  2. * 页面上拉触底事件的处理函数
  3. */
  4. onReachBottom() {
  5. },
  1. // pages/wxRequest/wxRequest.js
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {
  7. listArr:[]
  8. },
  9. /**
  10. * 生命周期函数--监听页面加载
  11. */
  12. onLoad(options) {
  13. wx.showLoading({
  14. title: '网络加载中...',
  15. mask:true//遮罩层,防止用户误触
  16. })
  17. this.getData();
  18. },
  19. getData(){
  20. wx.request({
  21. url: 'https://api.thecatapi.com/v1/images/search?limit=2',
  22. success:res=>{
  23. let oldArr = this.data.listArr;
  24. let newArr = oldArr.concat(res.data)//调用concat()方法进行数组的拼接
  25. console.log(res)
  26. this.setData({
  27. listArr:newArr
  28. })
  29. //当网络请求完成后,我们要自动的把下拉刷新的样式关闭掉,要不然不好看:
  30. wx.stopPullDownRefresh()
  31. },
  32. complete:res=>{
  33. //无论网络请求是否成功,都要关闭loading样式:
  34. wx.hideLoading()
  35. wx.hideNavigationBarLoading()
  36. }
  37. })
  38. },
  39. /**
  40. * 页面相关事件处理函数--监听用户下拉动作
  41. */
  42. onPullDownRefresh() {
  43. this.setData({
  44. //细节:其实我们下拉刷新后,应该先把页面清空,再获取新的数据:
  45. //只不过页面清空效果很快,肉眼看不太出来
  46. listArr:[]
  47. })
  48. this.getData();
  49. },
  50. /**
  51. * 页面上拉触底事件的处理函数
  52. */
  53. onReachBottom() {
  54. console.log("触底啦");
  55. wx.showNavigationBarLoading();
  56. this.getData();
  57. },

res.data是网络请求完成后获取到的数组: 

          let oldArr = this.data.listArr;
          let newArr = oldArr.concat(res.data)//调用concat()方法进行数组的拼接
                    console.log(res)
                    this.setData({
                    listArr:newArr
            })

 3、wx.request的其他参数:

wx.request(Object object),默认是get请求

  1. /**
  2. * 生命周期函数--监听页面加载
  3. */
  4. onLoad(options) {
  5. this.getData();
  6. },
  7. getData(){
  8. wx.request({
  9. url:"https://api.thecatapi.com/v1/images/search",
  10. method:"get",
  11. data:{
  12. limit:2 //如果是字符串就要写上双引号
  13. },
  14. success:res=>{
  15. console.log(res);
  16. }
  17. })
  18. },

 post请求:

  1. onLoad(options) {
  2. this.getData();
  3. },
  4. getData(){
  5. wx.request({
  6. url:"http://jsonplaceholder.typicode.com/posts",
  7. header:{"content-type":"application/json","token":123456},
  8. method:"post",
  9. data:{
  10. name:"zhangfei飞",
  11. age:18
  12. },
  13. success:res=>{
  14. console.log(res);
  15. }
  16. })
  17. },

                                         

案例1:POST请求获取
  • 接口URL:POST    https://tea.qingnian8.com/demoArt/get
  • Content-Type:  application/json

                                 

wxml:

  1. <view class="out">
  2. <veiw class="from">
  3. <input type= "text" model:value="{{iptValue}}" placeholder="请输入用户名" bindconfirm="onSubmit"/> <!--bindconfirm:回车触发此事件-->
  4. </veiw>
  5. <view class="row" wx:for="{{listArr}}" wx:key="_id">
  6. <view class="username">
  7. 用户名:{{item.title}}
  8. </view>
  9. <view class="time">时间:{{item.posttime}}</view>
  10. </view>
  11. </view>

wxss:

  1. .out{
  2. padding:30rpx;
  3. border: red solid 9rpx;
  4. }
  5. .out .row{
  6. padding:15rpx;
  7. border-bottom: 2px solid #ccc;
  8. }

 .js:

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. iptValue:""
  7. },
  8. onSubmit(){
  9. console.log(this.data.iptValue);
  10. },
  11. /**
  12. * 生命周期函数--监听页面加载
  13. */
  14. onLoad(options) {
  15. this.getData();
  16. },
  17. getData(){
  18. wx.request({
  19. url:" https://tea.qingnian8.com/demoArt/get",
  20. method:"POST",
  21. header:{"Content-Type":"application/json"},
  22. data:{
  23. num:3,
  24. page:1
  25. },
  26. success:res=>{
  27. console.log(res);
  28. }
  29. })
  30. },

案例2: POST 请求新增
  • 接口URL:POST        https://tea.qingnian8.com/demoArt/add
  • Content-Type:           application/json

                 

.js:

  1. Page({
  2. /**
  3. * 页面的初始数据
  4. */
  5. data: {
  6. iptValue:"",
  7. listArr:[]
  8. },
  9. onSubmit(){
  10. console.log(this.data.iptValue);
  11. wx.request({
  12. url:"https://tea.qingnian8.com/demoArt/add",
  13. method:"POST",
  14. header:{"Content-Type":"application/json"},
  15. data:{
  16. title:this.data.iptValue //插入的数据
  17. },
  18. success:res=>{
  19. console.log(res);
  20. if(res.data.errCode!=0){
  21. return; //如果插入数据失败,会直接返回
  22. }
  23. this.setData({
  24. iptValue:""//清空输入框
  25. })
  26. this.getData();//重新发起请求获取数据
  27. wx.showToast({
  28. title: res.data.errMsg
  29. })
  30. }
  31. })
  32. },
  33. /**
  34. * 生命周期函数--监听页面加载
  35. */
  36. onLoad(options) {
  37. this.getData();
  38. },
  39. getData(){
  40. wx.request({
  41. url:" https://tea.qingnian8.com/demoArt/get",
  42. method:"POST",
  43. header:{"Content-Type":"application/json"},
  44. data:{
  45. num:3,//取三条数据
  46. page:1
  47. },
  48. success:res=>{
  49. console.log(res);
  50. this.setData({
  51. listArr:res.data.data
  52. })
  53. }
  54. })
  55. },

wxml:

  1. <view class="out">
  2. <veiw class="from">
  3. <input type= "text" model:value="{{iptValue}}" placeholder="请输入用户名" bindconfirm="onSubmit" style="padding: 20rpx;background:#eee;margin-bottom: 20rpx;"/> <!--bindconfirm:回车触发此事件-->
  4. </veiw>
  5. <view class="row" wx:for="{{listArr}}" wx:key="_id">
  6. <view class="username">
  7. 用户名:{{item.title}}
  8. </view>
  9. <view class="time">时间:{{item.posttime}}</view>
  10. </view>
  11. </view>

wxss: 

  1. .out{
  2. padding:30rpx;
  3. border: red solid 9rpx;
  4. }
  5. .out .row{
  6. padding:15rpx;
  7. border-bottom: 2px solid #ccc;
  8. }

4、自定义组件Component

        新建文件夹componens->新建文件夹Myheader->新建Component

        注意:组件和pages同级:

        ​​​​​​​                ​​​​​​​        ​​​​​​​

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/252616
推荐阅读
相关标签
  

闽ICP备14008679号