element-ui 远程搜索组件el-select在项目中组件化的实现代码


Posted in Javascript onDecember 04, 2019

在项目中发现使用el-select时写的比较多重复代码,还有就是同一个页面使用el-select会出现label值会显示value值,
el-select组件化:

<template>
 <el-select
  :class="obj&&keyword[keywordAttr.label]? 'selected': ''"
  :value="keyword"
  :placeholder="obj && keyword[keywordAttr.label]? keyword[keywordAttr.label]: placeholder"
  filterable
  :clearable="clear"
  remote
  :multiple="multiple"
  :loading="selectLoading"
  :reserve-keyword="reserve"
  :remote-method="remoteMethod"
  :style="{width: width}"
  :disabled="disabled"
  :value-key="keywordAttr.id"
  @change="changeSelect"
  @clear="handleClear"
  @blur="handleBlur"
  @focus="handleFocus"
  @visible-change="handlerVisible"
 >
  <el-option
   v-for="item in keywordOptions"
   :key="item[keywordAttr.id]"
   :label="item[keywordAttr.label]"
   :value="obj? item: item[keywordAttr.value]"
   :disabled="item.disabled"
  >
   <slot :item="item"/>
  </el-option>
 </el-select>
</template>

<script>
export default {
 name: 'SelectRemote',
 props: {
  value: {
   type: [String, Object],
   default: ''
  },
  reserve: {
   type: Boolean,
   default: true
  },
  clear: {
   type: Boolean,
   default: false
  },
  disabled: {
   type: Boolean,
   default: false
  },
  multiple: {
   type: Boolean,
   default: false
  },
  selectLoading: {
   type: Boolean,
   default: false
  },
  width: {
   type: String,
   default: '100%'
  },
  keywordOptions: {
   type: Array,
   default: function() {
    return []
   }
  },
  keywordAttr: {
   type: Object,
   required: true,
   default: function() {
    return {
     id: '',
     label: '',
     value: ''
    }
   }
  },
  obj: {
   type: Boolean,
   default: false
  },
  placeholder: {
   type: String,
   default: function() { return '请输入关键词' }
  }
 },
 data() {
  return {
   keyword: this.value
  }
 },
 watch: {
  value(newVal) {
   this.keyword = newVal
  }
 },

 methods: {
  remoteMethod(query) {
   this.$emit('remoteMethod', query)
  },
  changeSelect(item) {
   this.$emit('changeSelect', item)
  },
  handleClear() {
   this.$emit('clear')
  },
  handleBlur() {
   this.$emit('blur')
  },
  handleFocus() {
   this.$emit('focus')
  },
  handlerVisible() {
   this.$emit('visible-change')
  }
 }
}
</script>

<style lang="scss" scoped>
.selected ::-webkit-input-placeholder{
 color: #606266 !important;
}
</style>

主要是使用了placeholder来显示;

在父组件中:

<SeletcRemote
       v-model="nodeOperate.saleEmp"
       :keyword-attr="nodeObjPerson"
       :keyword-options="empOptions"
       :clear="true"
       :obj="true"
       :select-loading="selectLoading"
       @remoteMethod="remoteMethod"
       @changeSelect="handleProductChange($event, nodeOperate, 'saleEmp')"
      />
nodeObjPerson: {
  id: 'id',
  label: 'empName'
  }
handleProductChange(val, row, field) {
   this.$set(row, field, val)
  }

可以在单选的的状态下完美解决了label显示值;

在多选状态下如何显示?

multipletrue时,暂时无法解决;只是使用了另一个组件:vue-multiselect

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断文件是否正在被使用的JS代码
Dec 21 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
Dec 09 Javascript
JavaScript重载函数实例剖析
May 13 Javascript
深入理解JavaScript定时机制
Oct 27 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
Nov 30 Javascript
JavaScript中捕获与冒泡详解及实例
Feb 03 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
JS按钮闪烁功能的实现代码
Jul 21 Javascript
微信小程序组件传值图示过程详解
Jul 31 Javascript
Vue实现商品飞入购物车效果(电商项目)
Nov 26 Javascript
在vue和element-ui的table中实现分页复选功能
Dec 04 #Javascript
vue项目中极验验证的使用代码示例
Dec 03 #Javascript
jQuery轮播图功能制作方法详解
Dec 03 #jQuery
JS实现的雪花飘落特效示例
Dec 03 #Javascript
vue中实现高德定位功能
Dec 03 #Javascript
node静态服务器实现静态读取文件或文件夹
Dec 03 #Javascript
js实现时分秒倒计时
Dec 03 #Javascript
You might like
PHP通过正则表达式下载图片到本地的实现代码
2011/09/19 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
php英文单词统计器
2016/06/23 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
2016/08/03 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
2020/04/22 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
2020/03/09 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
文明礼仪演讲稿
2014/05/12 职场文书
机械操作工岗位职责
2014/08/08 职场文书
合伙经营协议书范本
2014/09/13 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
入党培养人考察意见
2015/06/08 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python
Python装饰器详细介绍
2022/03/25 Python
我的收音机情缘
2022/04/05 无线电