小技巧|使用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://segmentfault.com/a/1190000017716554

原文地址:https://www.cnblogs.com/qixidi/p/10224794.html

时间: 2024-10-08 10:48:44

小技巧|使用Vue.js的Mixins复用你的代码的相关文章

git小技巧:git blame && git show 查看某一行代码的修改历史

先查看某行代码由谁写的,在哪个commit中提交的: git blame file_name git blame -L 58,100 KeyboardActivity.java 其显示格式为: commit ID | 代码提交作者 | 提交时间 | 代码位于文件中的行数 | 实际代码 类似于下面这样: 这样,我们就可以知道commit ID了,然后使用命令:Git show commitID来看~ git小技巧:git blame && git show 查看某一行代码的修改历史

Vue.js起手式+Vue小作品实战

本文是小羊根据Vue.js文档进行解读的第一篇文章,主要内容涵盖Vue.js的基础部分的知识的,文章顺序基本按照官方文档的顺序,每个知识点现附上代码,然后根据代码给予个人的一些理解,最后还放上在线编辑的代码以供练习和测试之用:在最后,我参考SegmentFault上的一篇技博,对Vue进行初入的实战,目的是将新鲜学到的知识立即派上用场:如果你还是前端的小白,相信这篇文章可能会对产生一些帮助和引起思想的碰撞,因为大家的学习历程是相似的,遇到的困惑也有一定的共通性,如果文章出现谬误之处,欢迎各位童鞋

vue.js之组件篇

Vue.js 组件 模块化:是从代码逻辑的角度进行划分的: 组件化:是从UI界面的角度进行划分的. 组件(Component)是 Vue.js 最强大的功能之一,组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树,如下图所示: 使用Vue.extend来创建全局vue组件: var com1 = Vue.extend({ template: '<h3>这是使用 Vue.extend 创建的组件&

hadoop编程小技巧(2)---计数器Counter

Hadoop代码测试版本:2.4 应用场景:在Hadoop编程的时候,有时我们在进行我们算法逻辑的时候想附带了解下数据的一些特性,比如全部数据的记录数有多少,map的输出有多少等等信息(这些是在算法运行完毕后,直接有的),就可以使用计数器Counter. 如果是针对很特定的数据的一些统计,比如统计以1开头的所有记录数等等信息,这时就需要自定义Counter.自定义Counter有两种方式,第一种,定义枚举类型,类似: public enum MyCounters{ ALL_RECORDS,ONE

Vue 使用中的小技巧

在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧,在下将不定期更新~ 1.多图表resize事件去中心化 1.1 一般情况 有时候我们会遇到这样的场景,一个组件中有几个图表,在浏览器resize的时候我们希望图表也进行resize,因此我们会在父容器组件中写: mounted() { setTimeout(() => window.onresize = () => { this.$refs.char

vue使用小技巧

1.多图表resize事件去中心化 1.1 一般情况 有时候我们会遇到这样的场景,一个组件中有几个图表,在浏览器resize的时候我们希望图表也进行resize,因此我们会在父容器组件中写: mounted() { setTimeout(() => window.onresize = () => { this.$refs.chart1.chartWrapperDom.resize() this.$refs.chart2.chartWrapperDom.resize() // ... }, 20

CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅

首页 登录注册 CSS 黑魔法小技巧,让你少写不必要的JS,代码更优雅 阅读 8113 收藏 927 2017-09-26 原文链接:github.com 腾讯云容器服务CSS,立即免费体验容器集群吧!cloud.tencent.com 之前不久,由于自己平时涉猎还算广泛,总结了一篇博客:这些JavaScript编程黑科技,装逼指南,高逼格代码,让你惊叹不已,没想到受到了大家的欢迎,有人希望能博主还能整理个 CSS 的一些黑魔法小技巧,无奈我 CSS 一直很渣,没什么干货,最近写了一个 Chro

MPVUE - 使用vue.js开发微信小程序

MPVUE - 使用vue.js开发微信小程序 什么是mpvue? mpvue 是美团点评前端团队开源的一款使用 Vue.js 开发微信小程序的前端框架.框架提供了完整的 Vue.js 开发体验,开发者编写 Vue.js 代码,mpvue 将其解析转换为小程序并确保其正确运行. 简单上手mpvue 官方提供了一套quickstart模板. vue init mpvue/mpvue-quickstart my-project 安装好依赖之后,执行npm run dev,将会将小程序文件打包进dis

【js】中的小技巧

本文主要介绍一些JS中用到的小技巧 1. 类型强制转换   1.1 string强制转换为数字 可以用*1来转化为数字(实际上是调用.valueOf方法) 然后使用Number.isNaN来判断是否为NaN,或者使用 a !== a 来判断是否为NaN,因为 NaN !== NaN '32' * 1            // 32 'ds' * 1            // NaN null * 1            // 0 undefined * 1    // NaN 1  * {