介绍

fish-select 是基于Element UI 的 Select 选择器 封装的组件,具有灵活的配置,以及强大的功能,支持自定义模版。

用法

基础用法

适用广泛的基础单选,简化了option的配置、数据绑定和展示字段。

  1. <template>
  2. <fish-select v-model="value" :data-list="dataList" ></fish-select>
  3. </template>
  4. <script>
  5. export default {
  6. data() {
  7. return {
  8. value: '',
  9. dataList: [{
  10. value: '选项1',
  11. label: '黄金糕'
  12. }, {
  13. value: '选项2',
  14. label: '双皮奶'
  15. }, {
  16. value: '选项3',
  17. label: '蚵仔煎'
  18. }, {
  19. value: '选项4',
  20. label: '龙须面'
  21. }, {
  22. value: '选项5',
  23. label: '北京烤鸭'
  24. }],
  25. }
  26. }
  27. }
  28. </script>

异步获取数据

新添加了直接获取异步数据的方法,支持入参配置

  1. <template>
  2. <fish-select v-model="value" :params='params' :get-list="getList" ></fish-select>
  3. </template>
  4. <script>
  5. export default {
  6. data() {
  7. return {
  8. value: null,
  9. dataList: [{
  10. value: '选项1',
  11. label: '黄金糕'
  12. }, {
  13. value: '选项2',
  14. label: '双皮奶'
  15. }, {
  16. value: '选项3',
  17. label: '蚵仔煎'
  18. }, {
  19. value: '选项4',
  20. label: '龙须面'
  21. }, {
  22. value: '选项5',
  23. label: '北京烤鸭'
  24. }],
  25. params:{
  26. id:1
  27. }
  28. }
  29. },
  30. methods: {
  31. getList(params) {
  32. console.log('getList 参数',params)
  33. return new Promise(reslove=>{
  34. setTimeout(()=>{
  35. reslove(this.dataList)
  36. },2000)
  37. })
  38. },
  39. }
  40. }
  41. </script>

远程搜索

大大简化了远程搜索的配置项

  1. <template>
  2. <fish-select v-model="value" :get-list="remoteMethod" remote ></fish-select>
  3. </template>
  4. <script>
  5. export default {
  6. data() {
  7. return {
  8. value: null,
  9. dataList: [{
  10. value: '选项1',
  11. label: '黄金糕'
  12. }, {
  13. value: '选项2',
  14. label: '双皮奶'
  15. }, {
  16. value: '选项3',
  17. label: '蚵仔煎'
  18. }, {
  19. value: '选项4',
  20. label: '龙须面'
  21. }, {
  22. value: '选项5',
  23. label: '北京烤鸭'
  24. }],
  25. params:{
  26. id:1
  27. }
  28. }
  29. },
  30. methods: {
  31. remoteMethod(params) {
  32. console.log('remoteMethod 参数',params)
  33. return new Promise(reslove=>{
  34. setTimeout(()=>{
  35. if(params.keyWord){
  36. reslove(this.dataList)
  37. }else{
  38. reslove([])
  39. }
  40. },2000)
  41. })
  42. },
  43. }
  44. }
  45. </script>

扩展事件

更多扩展事件的使用,比如获取当前选择数据等。

  1. <template>
  2. <fish-select
  3. v-model="value"
  4. @selectList="setSelectList"
  5. @currentObj="currentObj"
  6. :get-list="getList"
  7. :params='params'
  8. ></fish-select>
  9. </template>
  10. <script>
  11. export default {
  12. data() {
  13. return {
  14. value: null,
  15. dataList: [{
  16. value: '选项1',
  17. label: '黄金糕'
  18. }, {
  19. value: '选项2',
  20. label: '双皮奶'
  21. }, {
  22. value: '选项3',
  23. label: '蚵仔煎'
  24. }, {
  25. value: '选项4',
  26. label: '龙须面'
  27. }, {
  28. value: '选项5',
  29. label: '北京烤鸭'
  30. }],
  31. params:{
  32. id:1
  33. }
  34. }
  35. },
  36. methods: {
  37. getList(params) {
  38. console.log('getList 参数',params)
  39. return new Promise(reslove=>{
  40. setTimeout(()=>{
  41. reslove(this.dataList)
  42. },2000)
  43. })
  44. },
  45. setSelectList(arr) {
  46. console.log('setSelectList',arr)
  47. },
  48. currentObj(obj) {
  49. console.log('currentObj',obj)
  50. }
  51. }
  52. }
  53. </script>

其他使用

更多使用示例,包含禁用,基础多选,基础多选自定义模版等。

  1. <template>
  2. <label>禁用</label>
  3. <fish-select v-model="value" :data-list="dataList" disabled></fish-select>
  4. <label>基础多选</label>
  5. <fish-select v-model="value1" multiple :data-list="dataList" ></fish-select>
  6. <label>基础多选自定义模板</label>
  7. <fish-select
  8. v-model="value1"
  9. multiple
  10. :data-list="dataList"
  11. :custom-render="customRender"
  12. collapse-tags
  13. ></fish-select>
  14. </template>
  15. <script>
  16. export default {
  17. data() {
  18. return {
  19. value: null,
  20. value1: [],
  21. dataList: [{
  22. value: '选项1',
  23. label: '黄金糕'
  24. }, {
  25. value: '选项2',
  26. label: '双皮奶'
  27. }, {
  28. value: '选项3',
  29. label: '蚵仔煎'
  30. }, {
  31. value: '选项4',
  32. label: '龙须面'
  33. }, {
  34. value: '选项5',
  35. label: '北京烤鸭'
  36. }],
  37. params:{
  38. id:1
  39. }
  40. }
  41. },
  42. methods: {
  43. customRender(h, item) {
  44. return (
  45. <div>
  46. <span style="float: left">{item.label}</span>
  47. <span style="float: right; color: #8492a6; font-size: 13px">
  48. {item.value}
  49. </span>
  50. </div>
  51. );
  52. },
  53. getList(params) {
  54. console.log('getList 参数',params)
  55. return new Promise(reslove=>{
  56. setTimeout(()=>{
  57. reslove(this.dataList)
  58. },2000)
  59. })
  60. },
  61. setSelectList(arr) {
  62. console.log('setSelectList',arr)
  63. },
  64. currentObj(obj) {
  65. console.log('currentObj',obj)
  66. }
  67. }
  68. }
  69. </script>

配置项

封装的配置项及说明,其他配置和事件请参照 el-select

Props

字段 说明 类型 默认值
params 请求参数 object {}
valueKey 对应数据绑定和展示字段 Object { label: ‘label’, value: ‘value’ }
dataList 下拉数据 array []
getList 异步获取数据的方法,当dataList不为空时不执行该方法 promise -
filterable 是否可搜索 boolean true
clearable 是否可清楚 boolean true
customRender 自定义模版 Function -

Events

事件名称 说明 回调参数
selectList 当异步请求数据时成功回调 当前下拉数据 array
currentObj 当前选中或清除时回调 当前选中的数据 object、null