el-select的简单封装,使其返回值中包含key,value,obj 三种值
常规的el-select中change事件返回值,只有key返回,业务上有些需求有需要获取到value值,所以简单的封装了一下,使返回中包含key,value,obj三个值,基本上可以满足大部分的需求
封装代码
<template>
<div>
<el-select
v-model="v"
clearable
:placeholder="'请选择'+placeholder"
@change="change"
:multiple="multiple"
>
<el-option
v-for="item in options"
:key="item[value]"
:label="item[label]"
:value="item[value]"
:disabled="item[disabled]"
></el-option>
</el-select>
</div>
</template>
<script>
export default {
computed: {
v: {
get() {
return this.val;
},
set(e) {
this.$emit("update:val", e);
}
}
},
props: {
val: {
type: [String, Array],
default() {
return null;
}
},
options: {
type: [Object, Array],
default() {
return null;
}
},
multiple: {
type: Boolean,
default: false
},
label: {
type: String,
default: "label"
},
value: {
type: String,
default: "value"
},
placeholder: {
type: String,
default: ""
},
disabled: {
type: String,
default: "disabled"
}
},
methods: {
change(e) {
let options = this.options;
//e.length 只有当数组中存在值才进入,不加e.length的话清空时也会进入
if (Array.isArray(e) && e.length > 0) {
//多选时
const item = [];
const label = [];
for (const i of e) {
for (const j of options) {
if (j[this.value] == i) {
label.push(j[this.label]);
item.push(j);
}
}
}
this.$emit("change", e, label, item);
} else {
//非多选时
options.find(v => {
if (v[this.value] == e) {
this.$emit("change", e, v[this.label], v);
return;
}
});
}
}
}
};
</script>
<style>
</style>
调用代码
<template>
<div>
<c-select :options="options" :val.sync="val" @change="test"></c-select>
</div>
</template>
<script>
export default {
methods: {
test(a, b, c) {
console.log("test -> c", c);
console.log("test -> b", b);
console.log("test -> a", a);
},
},
data() {
return {
val: "1",//可以给默认值
options: [
{
label: "测试1",
value: "1"
},
{
label: "测试2",
value: "2"
}
]
};
}
};
</script>
v-model版
<template>
<div>
<el-select
:value="value"
clearable
:placeholder="'请选择'+placeholder"
@change="change"
:multiple="multiple"
>
<el-option
v-for="item in options"
:key="item[optionValue]"
:label="item[optionLabel]"
:value="item[optionValue]"
:disabled="item[disabled]"
></el-option>
</el-select>
</div>
</template>
<script>
export default {
model: {
event: "change"
},
props: {
value: {
type: [String, Array],
default() {
return null;
}
},
options: {
type: [Object, Array],
default() {
return null;
}
},
multiple: {
type: Boolean,
default: false
},
optionLabel: {
type: String,
default: "label"
},
optionValue: {
type: String,
default: "value"
},
placeholder: {
type: String,
default: ""
},
disabled: {
type: String,
default: "disabled"
}
},
methods: {
change(e) {
let options = this.options;
//清空
if (e.length === 0) {
//清空时会再次调用change方法,调用方法处需做非空判断,以免未知情况发生
this.$emit("change", "", "", "");
this.$emit("clear");
return;
}
if (Array.isArray(e)) {
//多选时
const item = [];
const label = [];
for (const i of e) {
for (const j of options) {
if (j[this.optionValue] == i) {
label.push(j[this.optionLabel]);
item.push(j);
}
}
}
this.$emit("change", e, label, item);
} else {
//非多选时
options.find(v => {
if (v[this.optionValue] == e) {
this.$emit("change", e, v[this.optionLabel], v);
return;
}
});
}
}
}
};
</script>
<style>
</style>
调用
<c-select v-model="val" :options="options" @change="test"></c-select>
el-select的简单封装,使其返回值中包含key,value,obj 三种值的更多相关文章
- python之路53 ajax补充返回序列化数据,多对多创建三种方式,django内置序列化组件(drf前身),批量操作数据,自定义分页器,form组件
ajax补充说明 主要是针对回调函数args接收到的响应数据 1.后端request.is_ajax() 用于判断当前请求是否由ajax发出 2.后端返回的三板斧都会被args接收不再影响整个浏览器页 ...
- Substring with Concatenation of All Words, 返回字符串中包含字符串数组所有字符串元素连接而成的字串的位置
问题描述:给定一个字符数组words,和字符串s,返回字符数组中所有字符元素组成的子串在字符串中的位置,要求所有的字符串数组里的元素只在字符串s中存在一次. 算法分析:这道题和strStr很类似.只不 ...
- javascript篇-知道value值,返回对象中的key值
前提是,value值是唯一的,业务中有这样一个需求,代码如下:
- iOS开发——UI篇OC篇&UITableView简单封装
UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...
- Spring jdbc 对象Mapper的简单封装
一般查询实体的时候,都需要这么使用/** * 根据id查询 * * @return */ public Emp queryEmpById(Intege ...
- Spring Boot将Mybatis返回结果转为驼峰的三种实现方式
本文不再更新,可能存在内容过时的情况,实时更新请访问原地址:Spring Boot将Mybatis返回结果转为驼峰的三种实现方式: 我们通常获取Mybatis返回的数据结果时想要将字段以驼峰的形式返回 ...
- ADO简单封装(MFC)
简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...
- FMDB简单封装和使用
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- iOS sqlite 增删改查 简单封装(基于 FMDB)
/** * 对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * * 基于 FMDB * * 操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...
随机推荐
- 基于keras的卷积神经网络(CNN)
1 前言 本文以MNIST手写数字分类为例,讲解使用一维卷积和二维卷积实现 CNN 模型.关于 MNIST 数据集的说明,见使用TensorFlow实现MNIST数据集分类.实验中主要用到 Conv1 ...
- Laravel入坑指南(番外)——任务调度
Laravel提供了非常强劲的命令行工具(如果还不了解,传送到第8往篇),我们如果想要定期执行某个命令行,可以利用crontab进行定时设置.如果有多个定期的任务,很简单,我们设定多条crontab规 ...
- Python之正则表达式匹配电话号码和邮箱
代码 #! python3 # phoneAndEmail.py - Finds phone numbers and email addresses on Clipboard import pyper ...
- 如何快速使用LayUI MINI框架
是什么 LayUI MINI是基于LayUI框架开发的一套最简洁.易用的后台框架模板,它已经是一个非常完整的脚手架,有现成的页面模板可以参考甚至是直接使用. 通常来说,如果我们准备开发一套管理系统的W ...
- 【API Management】使用 APIM Inbound Policy 来修改Content‐Type Header的值
问题描述 在使用APIM提供API服务管理的场景中,遇见了客户端请求时候发送的请求Header中的Content-Type不满足后台服务器的要求,但是在客户端要求客户修改代码难度较高. 所以面对这样的 ...
- 【Azure 环境】Azure Key Vault 采用自签名证书,是否需要CA provider
关于 Azure Key Vault 证书,密钥保管库证书支持适用于 x509 证书管理,它提供以下行为: 允许证书所有者通过密钥保管库创建过程或通过导入现有证书来创建证书. 包括自签名证书和证书颁发 ...
- 使用beyond compare或kompare作为git的对比、合并工具
两种方法 方法1: 直接使用命令 # 执行下面命令,参看支持对比合并工具名称,比如bc就是指beyond compare(收费软件,推荐使用开源的kompare) $ git difftool --t ...
- 非正式全面解析 NebulaGraph 中 Session 管理
NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Ses ...
- Dubbo基本见解
1.dubbo主要角色 Provider: 暴露服务的服务提供方. Consumer: 调用远程服务的服务消费方. a.订阅注册中心,注册中心广播服务变更,第一次会主动全量pull所有信息,后面增量会 ...
- GoLand打开后Project消失
一直用的好好的Goland,突然不能用了,左边栏Project"消失"了. 如下: 解决方法 遇到上面问题,一般情况是GoLand的cache问题,这个时候要将GoLand清理一下 ...