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 相关文章推荐
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
May 21 Javascript
js单例模式的两种方案
Oct 22 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
javascript中scrollTop详解
Apr 13 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
Aug 25 Javascript
js检测iframe是否加载完成的方法
Nov 26 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
JavaScript自学笔记(必看篇)
Jun 23 Javascript
js指定步长实现单方向匀速运动
Jul 17 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
node.js实现上传文件功能
Jul 15 Javascript
微信小程序加载机制及运行机制图解
Nov 27 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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
提高网站性能之 如何对待JavaScript
2009/10/31 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
总结JavaScript中布尔操作符||与&amp;&amp;的使用技巧
2015/11/17 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
详解Vue中组件的缓存
2019/04/20 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
Python守护线程用法实例
2017/06/23 Python
python基本语法练习实例
2017/09/19 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
Django实现发送邮件功能
2019/07/18 Python
django之对FileField字段的upload_to的设定方法
2019/07/28 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
C语言基础笔试题
2013/04/27 面试题
行政经理的岗位职责
2013/11/23 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
办理退休介绍信
2014/01/09 职场文书
法制宣传日活动总结
2014/04/29 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
小浪底导游词
2015/02/12 职场文书
借条如何写
2015/05/26 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang