Skip to content

MelSelect ( 选择器 )

演示

使用 options 传递数据源

不用再写 <el-option> 循环了, 数据直接传给 options 即可

使用 optionsApi 传递请求数据源的方法

直接把请求数据源的方法传给 optionsApi, 组件会自动调用并渲染

使用 optionsApi 传递请求数据源的参数

可以给 optionsApi 传递对象, 以控制 是否立即发起请求请求参数 等, 具体可参考 SelectOptionsApi 类型

筛选选项

通过 filterOptionMethod 传入方法对数据源选项进行筛选, 返回 false 则表示这个选项会被隐藏
· 方法第一个参数为启用 filterable 时的输入值, 若未启用则始终为 ''
· 方法第二个参数为当前筛选的选项数据

自定义渲染选项: 使用 options 传递 render

当数据源是在代码中定义时, 可以直接在 options 里传入 render 方法, 来自定义渲染选项
· 注意, 使用 render 时, 需要通过 <el-option> 渲染选项

自定义渲染选项: 使用 option 插槽

当数据源不是在代码中定义时, 可以使用 option 插槽, 来自定义渲染选项
· 注意, 使用 option 插槽时, 需要通过 <el-option> 渲染选项

自定义渲染选项内容: 使用 option-label 插槽

使用 option-label 插槽, 来自定义渲染选项内容 ( 仅内容部分, 而非整个选项 )

自定义渲染选项内容和标签: 使用 all-label 插槽

使用 all-label 插槽, 自定义渲染选项内容和标签
· 自定义渲染选项内容 ( 仅内容部分, 而非整个选项, 和 option-label 的作用一致 )
· 在未传入 label 插槽时代替 label 插槽来渲染标签

API

Props

参数名描述类型默认值
options选项数据源MelSelectOption[]-
optionsApi请求数据源的方法SelectOptionsApi-
filterOptionMethod对数据源选项进行筛选时执行的方法, 返回 false 则表示这个选项会被隐藏
 - 方法第一个参数为启用 filterable 时的输入值, 若未启用则始终为 ''
 - 方法第二个参数为当前筛选的选项数据
(query: string, option: MelSelectOption) => boolean | undefined-
...其它 el-select 属性均可使用--

Expose

方法名描述类型
selectRefSelect 组件实例SelectInstance
options选项数据源MelSelectOption[]
api请求数据源的组合式函数实例Reactive<UseRequestReturn>

Slots

名称描述
option自定义渲染选项
option-label自定义渲染选项内容 ( 仅内容部分, 而非整个选项 )
all-label自定义渲染选项内容和标签
 - 自定义渲染选项内容 ( 仅内容部分, 而非整个选项, 和 option-label 的作用一致 )
 - 在未传入 label 插槽时代替 label 插槽来渲染标签
...其它 el-select 插槽均可使用

类型定义

SelectOptionsApi

ts
export type SelectOptionsApi<T> = OptionsApiRequest<T> | SelectOptionsApiConfig<T>;
ts
export interface SelectOptionsApiConfig<T> extends OptionsApiConfig<T> {
  /**
   * 远程搜索时的字段名
   *  - 当 `filterable: true` 和 `remote: true` 时可用
   *  - 定义后则会在搜索时将输入值作为该字段的值传入 `api` 方法并发起请求
   */
  remoteKey?: string;
}
ts
export interface OptionsApiConfig<T> {
  /** 请求选项数据源的方法 */
  api?: OptionsApiRequest<T>;
  /**
   * 请求参数
   *  - 会传入 `api` 方法
   *  - 支持传入一个函数, 返回一个对象
   *  - 当请求参数发生变化时, 会重新发起请求
   */
  params?: MaybeRefOrGetter<Record<string, any> | undefined>;
  /**
   * 是否立即发起请求
   * @default true
   */
  immediate?: boolean;
}
ts
export type OptionsApiRequest<T> = (...args: any[]) => Promise<
  T[] |
  {
    data: T[] |
      {
        data: T[];
      };
  }
>;

Released under the MIT License.