mixins混入

2021/11/9 vue

# 介绍

什么是混入,官方给了这样的解释:

混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

简单来说:

我们定义了混入文件js,里面包含了data、methods,然后将这个js引入到vue文件中时,该vue也就包含了js中的那些data、methods

# 优先级

通过以上介绍,我们不难发现一个问题,mixins文件中如果和vue文件中定义了同样名字的data或者methods时怎么办,会不会报错。

答案是不会的,mixins是一个非常灵活的解决方案,如果发生了以上情况(实际场景中也经常会出现这个情况),那么会以vue组件中定义的data为准,也就是说vue中定义的data和method优先级更高。

mixins相当于把常用的data封装了,不需要在每个页面都写一遍,那么如果我页面中需要自定义该属性,只要重写即可,vue重写的data,优先级会更高。

# ThListMixins

下面我们介绍一下ith-vue中我们使用到的mixins场景。

众所周知,列表是非常常见的场景,并且包含的接口调用、传参、分页都是基础一致的,不一样的地方仅仅是url不同而已,因此我们将列表共用的内容全部封装到了mixins文件中,生成了ThListMixins.js文件。

在ThListMixins中,目前分为了data、created、methods三个部分的内容

  • data:
名称 描述 类型 说明
listLoading 属性 Boolean 绑定table的加载状态
queryParam 属性 Object 查询条件,用于绑定筛选区域的值
ipagination 属性 Object 绑定分页传参,包含current、pageSize、total
dataSource 属性 Array 数据源,用于绑定table的列表数据
isorter 属性 Object 排序参数
filters 属性 Object 筛选条件,与queryParam的区别是,内置的重置方法不会清空filters中的内容
defaultNotLoad 属性 Boolean 页面默认是否在创建时直接加载列表数据,默认为false,加载
area 属性 Array 选择地区筛选存放的参数
listTableHeight 属性 number 数据表格内容高度,根据页面尺寸变化自动计算,需要在使用el-table 地方增加属性 :max-height="listTableHeight"
windowHeightCha 属性 number 页面窗口头部高度, 默认250 可在调用组件中手动设置替换该值
tableHeaderCache 属性 boolean 表格头部缓存, 默认false 可在调用组件中手动设置替换该值,使用参考产品ith-admin中系统管理->参数设置->参数管理页面
tableHeaderCacheKey 属性 boolean 表格头部缓存key后缀,用于同一个路由下多个table需要缓存时使用, 默认'' 可在调用组件中手动设置替换该值
  • created:
名称 描述 类型 备注
created created Method 组件创建时的钩子函数,在此函数中,我们判断defaultNotLoad参数,然后决定是否直接加载数据
  • methods:
名称 描述 类型 备注
loadData 方法 Method 加载列表的方法,包含处理请求,处理回参
requestList 方法 Method 加载方法,对axios的二次封装
getQueryParams 方法 Method 整合查询条件的方法,将queryParam、filters、ipagination进行合并
searchQuery 方法 Method 提供给vue组件的点击查询事件
searchReset 方法 Method 提供给vue组件的点击重置事件
handlerHeaderDragend 方法 Method 提供给vue组件的拖拽表格宽度事件
saveHeaderCache 方法 Method 提供给vue组件的th-column-select @col事件保存缓存

# 滚动条使用问题

项目中列表数据过多需要在table内滚动的页面,需要给el-table设置一个max-height, 高度不用单独计算,直接使用ThListMixin.js中 listTableHeight 字段即可. 因为高度是基于可视区域计算的,若出现多个滚动条,需要调整windowHeightCha值的大小即可,如个别页面出现滚动条,只需要在当前页面data中定义一个windowHeightCha即可