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 相关文章推荐
基于jquery的回到页面顶部按钮
Jun 27 Javascript
基于jquery的用鼠标画出可移动的div
Sep 06 Javascript
web前端设计师们常用的jQuery特效插件汇总
Dec 07 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 jQuery
详解 vue.js用法和特性
Oct 15 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
Vuex的热更替如何实现
Jun 05 Javascript
Vue props中Object和Array设置默认值操作
Jul 30 Javascript
Vue实现导航栏菜单
Aug 19 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 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/05/10 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
asp.net和php的区别点总结
2019/10/10 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
通过js动态操作table(新增,删除相关列信息)
2012/05/23 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
简述vue状态管理模式之vuex
2018/08/29 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python中处理unchecked未捕获异常实例
2015/01/17 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python实现截屏的函数
2015/07/25 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
python字典嵌套字典的情况下找到某个key的value详解
2019/07/10 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
python 检测图片是否有马赛克
2020/12/01 Python
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
三字经教学反思
2014/04/26 职场文书
申论倡议书范文
2014/05/13 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
导游词之徐州-云龙山
2019/09/29 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL