uniapp vue mixin使用
- 这个mixin的翻版,主要用来分离处理列表数据逻辑
- 我用了覆写模式
- 创建mixin ListMoreDataMixin
// 由于没有超类的限制这里要判断下
function ____checkGetData(context) {
if (!context.getData || typeof context.getData !== 'function') {
throw new Error(
'使用[ListMoreDataMixin]必须实现getData函数')
}
}
export const ListMoreDataMixin = {
data() {
return {
listData: [], // 数据列表
page: 1, // 1
isLoading: false, // 是否在加载数据
}
},
methods: {
// 初始化数据
async initData() {
____checkGetData(this);
this.isLoading = true
const data = await this.getData();
this.listData = data;
this.isLoading = false;
},
// 上拉加载更多
async loadMore() {
____checkGetData(this);
this.isLoading = true;
this.page += 1;
const data = await this.getData();
if (!data.length) {
this.page--;
}
this.listData = [...this.listData, ...data];
this.isLoading = false;
},
// 下拉刷新
async onRefresh(done) {
____checkGetData(this);
this.page = 1;
this.listData = await this.getData();
done()
}
},
mounted() {
this.initData();
}
}
- 组件,这里用的uniapp
<myJobList @refresh="onRefresh" @loadMore="loadMore">
<myJobListItem v-for="it in listData" :data="it" v-key="it.id"></myJobListItem>
</myJobList>
<script>
import myJobListItem from 'widgets/my-job-list-item.vue';
import myJobList from 'widgets/my-job-list.vue';
import { ListMoreDataMixin } from 'list-more-data-mixin.js';
export default {
components: { myJobListItem, myJobList },
mixins: [ListMoreDataMixin],
methods: {
// ListMoreDataMixin
async getData() {
return new Promise(res => {
this.postHttp({
url: '/api/xxx',
data: {},
success(r) {
res(r.data);
}
});
});
},
}
};
</script>
- myJobList
<template>
<scroll-view
style="height: 100%;"
scroll-y="true"
scroll-with-animation="true"
refresher-enabled="true"
:refresher-triggered="isRefresh"
@refresherrefresh="refresherrefresh"
@scrolltolower="lower"
>
<slot></slot>
</scroll-view>
</template>
<script>
export default {
name: 'my-job-list',
data() {
return {
isRefresh: false
};
},
methods: {
lower(e) {
this.$emit('loadMore')
},
/**
* 下拉刷新
*/
refresherrefresh() {
this.isRefresh = true;
this.$emit('refresh', () => {
this.isRefresh = false;
});
}
}
};
</script>
uniapp vue mixin使用的更多相关文章
- vue.mixin与vue.extend
vue.mixin 全局注册一个混合,影响注册之后所有创建的每个 Vue 实例.谨慎使用全局混合对象,因为会影响到每个单独创建的 Vue 实例(包括第三方模板).大多数情况下,只应当应用于自定义选项, ...
- vue mixin使用
1.概述 将一些公用方法引入到不同的组件中. 2.引入方式 (1)全局引入 // 注册全局Mixin Vue.mixin({ methods: { $touch: function() { // 用以 ...
- Vue.mixin Vue.extend(Vue.component)的原理与区别
1.本文将讲述 方法 Vue.extend Vue.mixin 与 new Vue({mixins:[], extend:{}})的区别与原理 先回顾一下 Vue.mixin 官网如下描述: Vue. ...
- 理解Vue.mixin,带你正确的偷懒
关于Vue.mixin在vue官方文档中是这么解释的: 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能.一个混入对象可以包含任意组件选项.当组件使用混入对象时,所有 ...
- 使用uni-app(Vue.js)创建运行微信小程序项目步骤
使用uni-app(Vue.js)开发微信小程序项目步骤 1. 新建一个uni-app项目 创建完成后的目录结构 2. 打开微信小程序开发工具端的端口调试功能 3. 运行创建的项目 效果
- uni-app,vue,react,Trao之缓存类封装
uni-app,vue,react,Trao之缓存类封装 一,介绍与需求 1.1,介绍 缓存主要分为如下几个 1.LocalStorage LocalStorage是永久性的本地缓存,存储在客户端的浏 ...
- 一、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-项目引言
项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...
- 【手把手教程】uniapp + vue 从0搭建仿微信App聊天应用:腾讯云TXIM即时通讯的最佳实践
基于uniapp + vue 实现仿微信App聊天应用实践,实现以下功能 1: 用户登陆 2: 聊天会话管理 3: 文本/图片/视频/定位消息收发 4: 贴图表情消息收发 5: 一对一语音视频在线通话 ...
- 【手把手教程】uniapp + vue 从0搭建仿斗鱼虎牙直播App:腾讯云MLVB移动直播实践连麦PK+带货
基于uniapp + vue 实现仿斗鱼虎牙腾讯云移动直播应用实践,实现以下功能 1: 用户登陆 2: 房间管理 3: 房间聊天 4: 直播美颜 5: Svga礼物动画 6: 一对一连麦观众 项目开发 ...
随机推荐
- JS小整理
禁止右键和复制 $(document).ready( function() { document.body.oncontextmenu = document.body.ondragstart = do ...
- MVC架构 项目实践
MVC MVC架构程序的工作流程 springmvc 中dao层和service层的区别 项目实践 项目目录 项目实现流程 JSP登录页面View层 LoginServletjavaControlle ...
- Java——定时任务调度工具
一.什么是定时任务调度? 1.常用的定时调度工具:Timer和Quartz 二.Timer简介 1.Timer的定义以及架构 2.Timer示例 三.Timer的定时调度函数 1.schedule的四 ...
- form(form基础、标签渲染、错误显示 重置信息、form属性、局部钩子、全局钩子)
form基础 Django中的Form使用时一般有两种功能: 1.生成html标签 2.验证输入内容 要想使用django提供的form,要在views里导入form模块 from django im ...
- CSS(简介or选择器)
我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当H ...
- 代码审计学习01-in_array() 函数缺陷
一.开始代码审计之旅 01 从今天起,学习代码审计了,这篇文章就叫代码审计01吧,题目来自 PHP SECURITY CALENDAR 2017 的第一题,结合 红日安全 写的文章,开始吧. 二.先看 ...
- 图的连通性——Tarjan算法&割边&割点
tarjan算法 原理: 我们考虑 DFS 搜索树与强连通分量之间的关系. 如果结点 是某个强连通分量在搜索树中遇到的第⼀个结点,那么这个强连通分量的其余结点肯定 是在搜索树中以 为根的⼦树中. 被称 ...
- 使用eclipse写第一个Java_web的hello_world项目
1.先创建一个Java_web项目 如果你没有下载过Tomcat服务器,不会配置,建议看一下我得这一篇博客:https://www.cnblogs.com/kongbursi-2292702937/p ...
- hdu2157 How many ways??
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- 使用docker时报错“net/http: TLS handshake timeout”
问题原因 :该命令默认从docker远端镜像仓库中拉取镜像,但由于远端仓库的服务器是在国外,我们国内有的用户很可能都访问不到 解决:使用国内镜像仓库 docker pull registry.dock ...