【Uniapp小程序】实现上滑加载分页(触底加载)附后端Thinkphp代码

简介: 【Uniapp小程序】实现上滑加载分页(触底加载)附后端Thinkphp代码

分析说明

后端

$query_total=DB::table('book')->where(["class_id"=>$class_id])->paginate($per_page);
 查询符合条件的总记录总数
 $class=DB::table('book')->where(["class_id"=>$class_id])->limit($page,$per_page)->select();
 查询limit限制后的数据
 注意:thinkphp中 limit(a,b)表示从第a行的b条数据
//依据分类查询图书
    public function query_book_by_classid(){
        $token=input('token');
        $class_id=input('class_id');
        $page=input('page');//起始行
        $per_page=input('per_page');//每页数据
        $redis = new Redis();
        $result= $redis->get($token);
       if ($result) {
        //   limit(a,b)从第a行的b条数据 
              $query_total=DB::table('book')->where(["class_id"=>$class_id])->paginate($per_page);
              $class=DB::table('book')->where(["class_id"=>$class_id])->limit($page,$per_page)->select();
              $coun=ceil($query_total->total()/$per_page);
        die(
        json_encode(
            array(
            'code' => 200,
            'total' => $coun,
            'data' => $class,
            'msg' => '获取成功'
        ),480)
);
       } 
       else {
           die(
        json_encode(
            array(
            'code' => 100,
            'data'=>'',
            'msg' => 'token失效或不存在!请重新获取'
        ),480)
);
       }
    }

小程序端

实现触底加载我们需要用到onReachBottom方法

onReachBottom() {
    console.log("我被触发了");
    },
<script>
  export default {
    data() {
      return {
        // 商品数据
        goodsList:[],
        loadText:"",
        loadSwitch:false,
        // 分页信息
        total:"",//总页数
        page:0,//起始页
        per_page:6,//每页显示
      }
    },
    onReachBottom() {
      // 如果当前页数大于等于总页数,状态修改为没有更多了,不再继续往下执行代码
            uni.showLoading({
              title:'加载中..'
            })
          if(this.loadSwitch){
            this.loadSwitch = false;
            this.page = this.page+this.per_page;//页面新增一页
          setTimeout(() => {
            this.getGoodsList(this.tabs2[0]['id']);
          }, 1200); 
          }else{
            uni.hideLoading()
          }
        },
    onLoad() {
      this.get_book_class();
      setTimeout(() => {
        this.getGoodsList(this.tabs2[0]['id']);     
        console.log(this.tabs2[0]['id'])
      }, 1100);
    },
    methods: {
      getGoodsList(ee){
        console.log("默认得到的分类id"+ee)
              this.loadText = "加载中";
              uni.request({
                url: 'https://xxxxx/index.php/index/Api/query_book_by_classid', //仅为示例,并非真实接口地址。
                data: {
                    token:uni.getStorageSync('token'),
                  class_id:ee,
                  page:this.page,
                  per_page:this.per_page
                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded' //自定义请求头信息
                },
                success: (res) => {
                  this.goodsList = this.goodsList.concat(res.data.data);
                  var total=res.data.total;
                  if(this.page >= total) {
                    this.loadSwitch = false;
                    this.loadText = "没有啦~";
                    uni.hideLoading()
                  }else{
                  setTimeout(()=>{
                    this.loadText = "上拉加载更多";
                    this.loadSwitch = true;
                    uni.hideLoading()
                  },200);
                  }
                    }
              })
            },
      get_book_class(){
        let url = 'https://xxxxx/index.php/index/Api/query_class';
          uni.request({
            url,
            data: {
               token:uni.getStorageSync('token')
            },
            method:'GET',
            success: (res) => {
              console.log(res.data)
              if (res.data.code==200) {
                console.log(res.data.data.length)
                for(let i = 0;i<res.data.data.length;i++){
                  this.tabs2.push(res.data.data[i]);
                }
              } else{
                uni.showToast({
                  title:res.data.msg,
                  icon:'none'
                })
              }
              }
          })
      },
      onTabs2Change(index){
        // 设置激活
        console.log(index)
        this.tabs2Current = index;
        // 设置滚动位置
        let into = 0;
        if(this.tabs2.length - 2 < index){
          into = this.tabs2.length - 1;
        }else if(index > 1){
          into = index - 2;
        }
        this.tabs2IntoView = `tabs-${into}`
      }
    }
  }
</script>

代码成品

相关文章
|
人工智能 移动开发 JavaScript
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
如何用uniapp打包桌面客户端exe包,vue或者uni项目如何打包桌面客户端之electron开发-优雅草央千澈以开源蜻蜓AI工具为例子演示完整教程-开源代码附上
2018 18
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
760 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
小程序 前端开发 JavaScript
在线课堂+工具组件小程序uniapp移动端源码
在线课堂+工具组件小程序uniapp移动端源码
441 0
在线课堂+工具组件小程序uniapp移动端源码
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
840 0
|
小程序 前端开发 Java
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 是一款基于 SpringBoot、MybatisPlus 和 uniapp 的简易聊天软件,兼容 H5、小程序和 APP,提供丰富的注释和简洁代码,适合初学者。主要功能包括登录注册、消息发送、好友管理及群组交流。
486 1
SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
4909 3
|
小程序 API
微信小程序更新提醒uniapp
在小程序开发中,版本更新至关重要。本方案利用 `uni-app` 的 `uni.getUpdateManager()` API 在启动时检测版本更新,提示用户并提供立即更新选项,自动下载更新内容,并在更新完成后重启小程序以应用新版本。适用于微信小程序,确保用户始终使用最新版本。以下是实现步骤: ### 实现步骤 1. **创建更新方法**:在 `App.vue` 中创建 `updateApp` 方法用于检查小程序是否有新版本。 2. **测试**:添加编译模式并选择成功状态进行模拟测试。
879 0
微信小程序更新提醒uniapp
|
小程序 PHP
微信小程序给 thinkphp后端发送请求出现错误 Wrong number of segments 问题的解决 【踩坑记录】
本文记录了微信小程序向ThinkPHP后端发送请求时出现"Wrong number of segments"错误的解决方法。问题原因是小程序请求header中的token变量名写错,导致token未正确传递至后端。作者提供了详细的检查步骤和建议,包括验证URL路径、参数规范和路由配置的匹配,以确保请求能正确发送和处理。
|
小程序 前端开发 JavaScript
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序
【避坑宝】是一款企业黑红名单吐槽小程序,旨在帮助打工人群体辨别企业优劣。该平台采用SpringBoot+MybatisPlus+uniapp+uview2等技术栈构建,具备丰富的注释与简洁的代码结构,非常适合实战练习与学习。通过小程序搜索“避坑宝”即可体验。
591 0
【项目实战】SpringBoot+uniapp+uview2打造一个企业黑红名单吐槽小程序

热门文章

最新文章