vue.js整合vux中的上拉加载下拉刷新实例教程


Posted in Javascript onJanuary 09, 2018

前言

Vux 是基于 Vue 和 Weui 开发的手机端页面 UI 组件库,开发初衷是满足公司的微信端表单需求,因为第三方的调查问卷表单系统在手机上实在比较丑(还是 PC 那一套样式适配了大小而已)。于是用 vue 重构了表单组件,后来一发不可收拾把其他常用组件也一并开发了。

相比于 React 还是更喜欢用 Vue ,除了目前社区组件不多,周边构建工具还是比较完善的(作者也特别勤奋)。

下面话不多说了,来一看看详细的介绍吧。

先上图

vue.js整合vux中的上拉加载下拉刷新实例教程

创建项目

使用vue-cli 创建一个vue项目

安装vux,可以参考:vux快速入门

配置

安装 axios

yarn add axios
//...
 methods: {
 fetchData(cb) {
  axios.get('http://localhost:3000/').then(response => {
  this.$nextTick(() => {
   this.$refs.scrollerBottom.reset()
  })
  cb(response.data)
  })
 }
 }
//...

完善refresh,loadMore方法

//...
 methods: {
 refresh() {
  this.fetchData(data => {
  this.list = data.list
  this.$refs.scrollerBottom.enablePullup()
  this.$refs.scrollerBottom.donePulldown()
  })
 },
 loadMore() {
  this.fetchData(data => {
  if (this.list.length >= 10) {
   this.$refs.scrollerBottom.disablePullup()
  }
  this.list = this.list.concat(data.list)
  this.$refs.scrollerBottom.donePullup()
  })
 }
 }
//...

在组件加载的时候调用一下 loadMore 方法

//...
 mounted() {
 this.$nextTick(() => {
  this.$refs.scrollerBottom.reset({top: 0})
 })
 this.loadMore()
 }
//...

最后把html部分补全

<scroller>
 <div style="padding: 10px 0">
 <div class="box" v-for="(item, index) in list" :key="index">
  <p class="list"></p>
 </div>
 </div>
</scroller>

完整代码

<template>
 <div>
 <x-header :left-options="{'showBack': false}">上拉加载,下拉刷新</x-header>
 <scroller use-pullup :pullup-config="pullupDefaultConfig" @on-pullup-loading="loadMore"
    use-pulldown :pulldown-config="pulldownDefaultConfig" @on-pulldown-loading="refresh"
    lock-x ref="scrollerBottom" height="-48">
  <div style="padding: 10px 0">
  <div class="box" v-for="(item, index) in list" :key="index">
   <p class="list"></p>
  </div>
  </div>
 </scroller>
 </div>
</template>
<script>
 import {Scroller, XHeader} from 'vux'
 import axios from 'axios'

 const pulldownDefaultConfig = {
 content: '下拉刷新',
 height: 40,
 autoRefresh: false,
 downContent: '下拉刷新',
 upContent: '释放后刷新',
 loadingContent: '正在刷新...',
 clsPrefix: 'xs-plugin-pulldown-'
 }
 const pullupDefaultConfig = {
 content: '上拉加载更多',
 pullUpHeight: 60,
 height: 40,
 autoRefresh: false,
 downContent: '释放后加载',
 upContent: '上拉加载更多',
 loadingContent: '加载中...',
 clsPrefix: 'xs-plugin-pullup-'
 }
 export default {
 components: {
  XHeader,
  Scroller
 },
 mounted() {
  this.$nextTick(() => {
  this.$refs.scrollerBottom.reset({top: 0})
  })
  this.loadMore()
 },
 data() {
  return {
  list: [],
  pullupDefaultConfig: pullupDefaultConfig,
  pulldownDefaultConfig: pulldownDefaultConfig
  }
 },
 methods: {
  fetchData(cb) {
  axios.get('http://localhost:3000/').then(response => {
   this.$nextTick(() => {
   this.$refs.scrollerBottom.reset()
   })
   cb(response.data)
  })
  },
  refresh() {
  this.fetchData(data => {
   this.list = data.list
   this.$refs.scrollerBottom.enablePullup()
   this.$refs.scrollerBottom.donePulldown()
  })
  },
  loadMore() {
  this.fetchData(data => {
   if (this.list.length >= 10) {
   this.$refs.scrollerBottom.disablePullup()
   }
   this.list = this.list.concat(data.list)
   this.$refs.scrollerBottom.donePullup()
  })
  }
 }
 }
</script>
<style lang="less">
 .box {
 padding: 5px 10px 5px 10px;
 &:first-child {
  padding: 0 10px 5px 10px;
 }
 &:last-child {
  padding: 5px 10px 0 10px;
 }
 }
 .list {
 background-color: #fff;
 border-radius: 4px;
 border: 1px solid #f0f0f0;
 padding: 30px;
 }
 .xs-plugin-pulldown-container {
 line-height: 40px;
 }
 .xs-plugin-pullup-container {
 line-height: 40px;
 }
</style>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript学习点滴 call、apply的区别
Oct 22 Javascript
json的使用小结
Jun 08 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
form表单数据封装成json格式并提交给服务器的实现方法
Dec 14 Javascript
JS实现的JSON序列化操作简单示例
Jul 02 Javascript
详解js实时获取并显示当前时间的方法
May 10 Javascript
JavaScript迭代器的含义及用法
Jun 21 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
Js实现复选框的全选、全不选反选功能代码实例
Feb 28 Javascript
JS实现网页时钟特效
Mar 25 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
修改NPM全局模式的默认安装路径的方法
Dec 15 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 #Javascript
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 #Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 #Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 #Javascript
基于vue-ssr服务端渲染入门详解
Jan 08 #Javascript
浅谈Vue2.0父子组件间事件派发机制
Jan 08 #Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 #jQuery
You might like
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php排序算法实例分析
2016/10/17 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
jQuery实现简单轮播图效果
2020/12/27 jQuery
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
python实现基于SVM手写数字识别功能
2020/05/27 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
实时获取Python的print输出流方法
2019/01/07 Python
HTML5 微格式和相关的属性名称
2010/02/10 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
文化与传播毕业生求职信
2014/03/09 职场文书
赔偿协议书范本
2014/04/15 职场文书
2014年绿化工作总结
2014/12/09 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
辩护词范文大全
2015/05/21 职场文书
高中历史教学反思
2016/02/19 职场文书
导游词之无锡唐城
2019/12/12 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python