filter-group
介绍
该组件常用于一些筛选条件。可以配合不同的UI组件库,采取配置的形式进行渲染如: select, date-picker 等。并转换出用户想要的格式
TIP
如果使用 unplugin-vue-components 库配合第三方UI库进行按需导入时要注意
因为该组件是通过 component vue 的内置组件渲染第三方UI库的组件,这使得 unplugin-vue-components 不会自动引入第三方UI库的对应组件相关Issue,因此你需要手动导入组件。如果在使用改组件之前, unplugin-vue-components 已经自动导入了相关组件,则无需手动导入以下配置。
举个例子:
我想在 filter-group 组件组件中,配置 element-plus 的 el-input 和 el-select 组件时,如果 components.d.ts 是以下配置:
ts
// generated by unplugin-vue-components
// We suggest you to commit this file into source control
// Read more: https://github.com/vuejs/core/pull/3399
import '@vue/runtime-core'
export {}
declare module '@vue/runtime-core' {
export interface GlobalComponents {
PinFilterGroup: typeof import('pinos-ui')['PinFilterGroup']
}
}
这个时候就需要手动导入 el-input 和 el-select 相关配置
- 新建一个 element-plus 导入文件
ts
// element-plus/index.ts
import { ElSelect, ElOption, ElInput } from 'element-plus'
import type { App } from 'vue'
import 'element-plus/es/components/select/style/css'
import 'element-plus/es/components/option/style/css'
import 'element-plus/es/components/input/style/css'
export default function (app: App) {
app.component(ElSelect.name, ElSelect)
app.component(ElOption.name, ElOption)
app.component(ElInput.name, ElInput)
}
- 在入口文件中使用该配置
ts
// main.ts
import InstallElementPlus from './element-plus/index'
// ...
createApp(App).use(InstallElementPlus)
背景
在我们开发一个后台管理系统的时候,会遇到许多对table列表进行过滤或条件筛选的场景。通常来说,我们往往需要再template中分别写对应的过滤组件如: input, select, date-picker 等,并且还要搜集每个组件的 modelValue,然后组合出一个 object,最后将这个 object 最作为过滤条件传入对应的接口。该组件用配置形式去渲染对应的组件,这样,你只需要维护一个配置项即可。
代码示例 (UI库:element-plus)
select
select(基础)
select(基础-绑定change事件)
select(多选)
select(自定义)
select(分组)
select(远程搜索)
checkbox
TIP
radio 与 checkbox 配置类似
checkbox(基础)
checkbox(基础-事件绑定)
checkbox(自定义)
auto-complete
auto-complete(基础)
auto-complete(自定义)
cascader 级联选择器
cascader(基础)
cascader(多选)
date-picker
TIP
el-time-picker 配置类似
date-picker(基础)
date-picker(时间范围)
date-picker(时间范围-设置别名)
date-picker(自定义)
input
input(基础)
select-v2
select-v2(基础)
select-v2(多选)
select-v2(分组)
select-v2(自定义)
代码示例 (UI库:naive-ui)
select
TIP
树型选择 Tree Select 配置类似
select(基础)
select(基础-绑定blur事件)
select(多选)
select(自定义)
select(分组)
checkbox
TIP
radio 与 checkbox 配置类似
checkbox(基础)
auto-complete
auto-complete(基础)
auto-complete(自定义)
cascader 级联选择器
cascader(基础)
cascader(多选)
date-picker
TIP
time-picker 配置类似
date-picker(基础)
date-picker(时间范围)
date-picker(时间范围-设置别名)
input
input(基础)
数据联动
自定义插槽
filterGroup 属性
属性名 | 说明 | 类型 | 必传 | 默认值 | 是否可以全局配置 |
---|---|---|---|---|---|
modelValue / v-model | 绑定值 | object | 是 | - | 否 |
option | 配置项 | FilterGroupOption[] | 是 | - | 否 |
FilterGroupOption 属性
属性名 | 说明 | 类型 | 必传 | 默认值 | 是否可以全局配置 |
---|---|---|---|---|---|
element | 组件名(如果是插槽则传入 'slot') | string | 是 | - | 否 |
bindingArg | v-model的arg(指令的参数) | string | 否 | modelValue | 否 |
modelKey | 组件双向绑定的key值 | string | 否 | - | 否 |
hidden | 是否隐藏该组件 | boolean | 否 | - | 否 |
slotName | 命名插槽的名字(当 element 为 slot 时必传) | string[] | 否 | - | 否 |
events | 绑定组件的事件 | object | 否 | - | 否 |
props | 绑定组件的props(style样式也可在这里添加) | object 或 (data: any) => object | 否 | - | 否 |
renderList | 嵌套组件的渲染数据 | any[] 或 (data: any, index: number) => any[] | 否 | - | 否 |
alias | 别名(在时间组件时候可用) | object | 否 | - | 否 |
children | 绑定的组件内部含有子组件时可配置 | FilterGroupConfig | 否 | - | 否 |