完整的无限懒加载demo(后台到前台)

原创声明

本文系作者辛苦码字所得,欢迎分享和转载,但请在明显位置注明作者的如下信息:
笔名:来碗鸡蛋面
简书主页:https://www.jianshu.com/u/4876275b5a73
邮箱:job_tom@foxmail.com
CSDN ID:tom_wong666

demo目标:

实现完整的懒加载demo,包括后台服务器数据到前台展示。

提示:

文末有彩弹,如果急于看结果的同学可以直接到移步到最后一段。

环境:

win10+XAMPP(开启Apache和MySql)+VSCode

框架:

Vue

基本思路:

一,搭建数据库---MySql;

二,查询数据库数据并返回到前端---php;

三,前端请求获取数据---js vue axios;

四,前端展示数据,并依据页面滚动情况反复触发请求获取更多数据---html css js vue-infinite-scroll;

具体实现:

一,搭建数据库---MySql:


#重建数据库newxiaoa

    SET NAMES UTF8;

    DROP DATABASE IF EXISTS newxiaoa;

    CREATE DATABASE newxiaoa CHARSET=UTF8;

    USE newxiaoa;

#栏目1 

    #创建表content:

    #cid--内同容排序id

    #content--主内容块

    #isDel--是否删除

    #isDan--是否是危险内容

    CREATE TABLE content(

        cid INT PRIMARY KEY AUTO_INCREMENT,

        content VARCHAR(1024) NOT NULL,

        isDel INT NOT NULL DEFAULT 0,

        isDan INT NOT NULL DEFAULT 1

    );

#插入一段测试内容-1

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

);    

#插入一段测试内容-2

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-3

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-4

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-5

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-6

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

);    

#插入一段测试内容-7

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-8

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-9

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

); 

#插入一段测试内容-10

INSERT INTO content VALUES(

    '',

    '中学时暗恋班花,被同班的女汉子知道了,

    连忙请她保密,本以为向来爽朗不羁的她是不屑告密的,

    结果丫飞快的把我出卖了。 后来想想,也可能是我拜托她的方式不对,

    不该说什么这是男人之间的约定。',

        0,

        0

);                                 

二,查询数据库数据并返回到前端---php:


<?php

  //允许跨域请求

  header('Access-Control-Allow-Origin:*');

  //链接数据库

  $conn=mysqli_connect("127.0.0.1","root","","newxiaoa",3306);

  //设置数据库字符集

  $sql="SET NAMES UTF8";

  //链接数据库并设置

  mysqli_query($conn,$sql);

  //获取前台发来的cid

  $cid=$_REQUEST["cid"];

  //定义查询语句

  $find="SELECT content FROM content WHERE cid=$cid AND isDel=0";

  //执行查询语句

  $res=mysqli_query($conn,$find);

  //抓取查询到的信息

  $row=mysqli_fetch_row($res);

  //定义返回值并赋值和抛出

  $output=[];

  $output[]=["code"=>200,"data"=>$row];

  echo json_encode($output);

三,前端请求获取数据---js vue axios;

1,安装axios

//安装:
npm install --save axios vue-axios
//main.js设置
import axios from 'axios'
Vue.prototype.$http = axios
//组件内使用
this.$http.post('http://127.0.0.1/main.php?cid=1')

 .then(res=>{

   //验证是否成功获取数据

   console.log(res);

   }).catch(error=>{

   //数据错误时的异常处理

   console.log(error);
})

2,页面内请求和处理数据:

  methods:{
    //定义请求函数
    async fetch(){
      //请求数据
      const res = await this.$http.get('http://127.0.0.1/main.php?cid='+this.num);
      //定义数据格式
      const contentAdd=[
        {
          header:{},
          body:{
            article:"",
          },
          footer:{
            viewNum:999,
            commentNum:888,
          }
        },
      ];
      //赋值
      contentAdd[0].body.article=res.data[0].data[0];
      //判断是否是第一次请求
      if(!this.content.length){
        //首次直接赋值
        this.content=contentAdd;
      }else{
        //以后获取的拼接上去
        this.content=this.content.concat(contentAdd);  
      }
    }
  },

四,前端展示数据,并依据页面滚动情况反复触发请求获取更多数据---html css js vue-infinite-scroll:

1,配置vue-infinite-scroll

//安装
npm i vue-infinite-scroll -D
//main.js中通过如下方式注册全局引用
import infiniteScroll from 'vue-infinite-scroll'
Vue.use(infiniteScroll)
//页面中使用

<div 

v-infinite-scroll="loadMore" 

infinite-scroll-disabled="switchForMore" 

infinite-scroll-distance="20">

  vue-infinite-scroll示例

</div>

2,vue-infinite-scroll的参数说明:

v-infinite-scroll="loadMore" 中的loadMore事件绑定处理函数,在达到条件(滚动到一定像素)时触发此函数。

infinite-scroll-disabled="switchForMore" 中的switchForMore===true阻止触发loadMore,反之不阻止;

3,数据获取的this.fetch()函数的触发时机:

//时机1:dom挂载时 
 mounted() {
    this.fetch();
  },
//时机2:页面滚动时
  methods:{
    loadMore(){
      alert('触发loadMore'+this.num);
      this.num+=1;
      //数据库目前只有10条数据,mounted时已加载一条了
      if(this.num>9){
        this.switchForMore=true;
        return;  
      }     
      this.fetch();
    },
}

以上可以运行的代码地址如下,可以直接clone到本地参考,vue的部分在home.vue和main.js里面,sql在main.sql里面,php的在main.php里面。

demo的github地址:https://github.com/tom-wong666/xiaoa.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容

  • 基于Vue的一些资料 内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 element★...
    尝了又尝阅读 1,156评论 0 1
  • 简说Vue (组件库) https://github.com/ElemeFE/element" 饿了么出品的VUE...
    Estrus丶阅读 1,687评论 0 1
  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组...
    鲁大师666阅读 43,408评论 5 97
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    35eeabfa0772阅读 3,279评论 7 12
  • UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 m...
    小姜先森o0O阅读 9,514评论 0 72