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 相关文章推荐
一个tab标签切换效果代码
Mar 27 Javascript
扩展jQuery 键盘事件的几个基本方法
Oct 30 Javascript
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
JsRender for object语法简介
Oct 31 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
RequireJS入门一之实现第一个例子
Sep 30 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 Javascript
使用JSON作为函数的参数的优缺点
Oct 27 Javascript
vue实现组件之间传值功能示例
Jul 13 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
Oct 19 Javascript
详解js动态获取浏览器或页面等容器的宽高
Mar 13 Javascript
vue实现axios图片上传功能
Aug 20 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中常用数组处理方法实例分析
2008/08/30 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
PHP反射机制用法实例
2014/08/28 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
laravel通用化的CURD的实现
2019/12/13 PHP
IE中getElementsByName()对有些元素无效的解决方案
2014/09/28 Javascript
Jquery Ajax Error 调试错误的技巧
2015/11/20 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
Python 备份程序代码实现
2017/03/06 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
大学校园活动策划书
2014/02/04 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
学校创先争优活动总结
2014/08/28 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
学术会议通知范文
2015/04/15 职场文书
千手观音观后感
2015/06/03 职场文书
狂人日记读书笔记
2015/06/30 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
创业计划书之水果店
2019/07/18 职场文书
详解Python描述符的工作原理
2021/06/11 Python