专栏首页做工程师不做码农小技巧|使用Vue.js的Mixins复用你的代码

小技巧|使用Vue.js的Mixins复用你的代码

Vue中的混入 mixins 是一种提供分发 Vue 组件中可复用功能的非常灵活的方式。听说在3.0版本中可能会用Hooks的形式实现,但这并不妨碍它的强大。基础部分的可以看这里。

这里主要来讨论 mixins 如何优化我们的数据列表代码。

如果我们有大量的表格页面,仔细一扒拉你发现非常多的东西都是可以复用的例如分页,表格高度,加载方法, laoding 声明等一大堆的东西。下面我们来整理出来一个简单通用混入 list.js

list.js

const list = {
  data () {
    return {
      loading: false,
      pageParam: {
        pageNum: 1, // 页码
        pageSize: 20, // 页长
        total: 0 // 总记录数数
      },
      pageSizes: [10, 20, 30, 50], // 页长数
      pageLayout: 'total, sizes, prev, pager, next, jumper', // 分页布局
      pageCount: 5, // 页码按钮的数量,当总页数超过该值时会折叠(大于等于 5 且小于等于 21 的奇数)
      list: []
    }
  },
  methods: {
    // 分页回掉事件
    handleSizeChange (val) {
      this.pageParam.pageSize = val
      this.getList()
    },
    handleCurrentChange (val) {
      this.pageParam.pageNum = val
      this.getList()
    },
    /**
     * 表格数据请求成功的回调 处理完公共的部分(分页,loading取消)之后把控制权交给页面
     * @param {*} apiResult
     * @returns {*} promise
     */
    listSuccessCb (apiResult = {}) {
      return new Promise((resolve, reject) => {
        let tempList = [] // 临时list
        try {
          this.loading = false
          tempList = apiResult.data
          this.pageParam.total = apiResult.page.total
          // 直接抛出
          resolve(tempList)
        } catch (error) {
          reject(error)
        }
      })
    },
    /**
     * 处理异常情况
     * ==> 简单处理 仅仅是对表格处理为空以及取消loading
     */
    listExceptionCb (error) {
      this.loading = false
      console.error(error)
    }
  },
  created () {
    // 这个生命周期是在使用组件的生命周期之前
    this.$nextTick().then(() => {
      // todo
    })
  }
}
export default list

下面我们直接在组件中使用这个mixins

import mixin from '@/mixins/list' // 引入
import {getList} from '@/api/demo'
export default {
  name: 'mixins-demo',
  mixins: [mixin], // 使用mixins
  data () {
    return {
    }
  },
  methods: {
    // 加载列表
    getList () {
      const params = { ...this.searchForm, ...this.pageParam }
      fetchUserList(params).then(res => {
        if (res.code === 0) {
          this.listSuccessCb(res).then((list) => {
            this.list = list
          }).catch((err) => {
            console.log(err)
          })
        }
      })
    },
  },
  created() {
    this.load()
  }
}

使用了 mixins 之后一个简单的有 loadoing, 分页,数据的表格大概就只需要上面这些代码。

list.js中我们可以直接调用组件的方法,比如在分页回调事件中调用组件的 getList()方法,在组件中直接调用 list.js中的代码,如直接访问 this.pageParam

当组件和 mixins 对象含有同名选项时,这些选项将以恰当的方式混合。比如,数据对象在内部会进行浅合并 (一层属性深度),在和组件的数据发生冲突时以组件数据优先。

你学会了吗?还不快试试。。。

本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!

本文链接:https://zhangbing.site/2019/01/02/Tips-Reuse-your-code-with-Vue-js-Mixins/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring IOC(依赖注入、控制反转)概念理解

    用了Spring之后, Spring容器会负责把被依赖的B组件注入到A组件中,A只要被动地等待即可。

    Dunizb
  • 在Koa.js中实现文件上传的接口

    文件上传是一个基本的功能,每个系统几乎都会有,比如上传图片、上传Excel等。那么在Node Koa应用中如何实现一个支持文件上传的接口呢?本文从环境准备开始、...

    Dunizb
  • 浏览器的线程和进程

    多线程可以并行处理任务,但是线程是不能单独存在的,它是由进程来启动和管理的 一个进程就是一个程序的运行实例。详细解释就是,启动一个程序的时候,操作系统会为该程...

    Dunizb
  • 【工具】Java开发者必备的六款工具

    每一位Java程序员都会有套工具来应对工作上的挑战。多年来,Java程序员使用软件来完成他们的工作。有很多工具对他们是有用的,不过对于初入行的人员来说,寻找合适...

    老九君
  • 碎片化 | 第四阶段-46-值栈valueStack介绍和原理-视频

    如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/q0567vth0ol.html ValueStack 值栈:(接口) ...

    码神联盟
  • 【算法】213-每周一练 之 数据结构与算法(LinkedList)

    这些都是数据结构与算法,一部分方法是团队其他成员实现的,一部分我自己做的,有什么其他实现方法或错误,欢迎各位大佬指点,感谢。

    pingan8787
  • Django自定义user表

    需要注意的是我们自定义的表的表名必须是 auth_user ,而且必须有属性 is_active , is_staff , has_perm 和 has_mod...

    渔父歌
  • 看完这篇,别人的开源项目结构应该能看懂了

    近来,和不少初学Spring或Spring Boot的小伙伴私信交流了关于项目目录结构划分和代码分层的问题。

    乔戈里
  • Spring 源码分析(一)之 Spring IOC 容器基础介绍

    是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种...

    zoro
  • STL算法(拷贝/替换)简介copyreplacereplace_ifswap

    用户2929716

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动