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 ToolTip提示效果
Jul 20 Javascript
如何利用AngularJS打造一款简单Web应用
Dec 05 Javascript
jQuery基于cookie实现的购物车实例分析
Dec 24 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
javascript ES6 新增了let命令使用介绍
Jul 07 Javascript
Vue.js2.0中的变化小结
Oct 24 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
使用Vue开发一个实时性时间转换指令
Jan 17 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
vue中监听路由参数的变化及方法
Dec 06 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
Feb 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
文件上传类
2006/10/09 PHP
PHP入门
2006/10/09 PHP
用PHP生成静态HTML速度快类库
2007/03/18 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
2015/12/26 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
微信小程序自定义tabbar custom-tab-bar 6s出不来解决方案(cover-view不兼容)
2019/11/01 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
5种Python单例模式的实现方式
2016/01/14 Python
使用Python生成随机密码的示例分享
2016/02/18 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
Python count函数使用方法实例解析
2020/03/23 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
英国打印机墨盒销售网站:Ink Factory
2019/10/07 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
指针和引用有什么区别
2013/01/13 面试题
生物技术研究生自荐信
2013/11/12 职场文书
大学社团活动总结
2014/04/26 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
公务员处分决定书
2015/06/25 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
golang中的空接口使用详解
2021/03/30 Python