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 整 ...
随机推荐
- 【Android】使用AIDL实现进程间通讯简单案例
1 AIDL 简介 AIDL(Android Interface Definition Language)是一种接口定义语言,用于生成可在 Android 设备上两个进程之间进行进程间通信(IPC ...
- Windows 进程的一些学习笔记
进程的内存映像是指内核在内存中如何存放可执行程序文件. 在将程序转化为进程的过程中,操作系统将可执行程序由硬盘复制到内存. 可执行程序和内存映像的区别 可执行程序位于磁盘中而内存映像位于内存中: 可执 ...
- win32 - 虚拟内存的一些介绍
对32位Windows来说,其虚拟地址空间总数就是2的32次方,即4GB. 如果没有在引导时加上/3GB或/BOOTVA选项,Windows默认最大会分2GB给内核模式程序使用,2GB给用户模式程序. ...
- win32-改变Combox的编辑框和下拉列表的背景颜色和文本字体颜色
只需要调用WM_CTLCOLORLISTBOX和WM_CTLCOLOREDIT来分别处理编辑框和下拉列表. Combox的创建: int xpos = 100; // Horizontal posit ...
- 目标检测 - VOC - xml标注格式
目标检测 - VOC - xml标注格式 相对其他计算机视觉任务,目标检测算法的数据格式更为复杂.为了对数据进行统一的处理,目标检测数据一般都会做成VOC或者COCO的格式. XML标注格式 < ...
- 01、uwsgi、gunicorn如何实现优雅重启
1.为何需要优雅重启 在实际开发过程中,我们会不断迭代升级产品,每次迭代后,都需要在线上服务器更新代码.一般小公司的迭代升级,是没有做到像金丝雀发布或者使用到kubernetes这些东西的.那如何保证 ...
- 【Application Insights】使用CURL命令向Application Insgihts发送测试数据
问题描述 在使用App Service或者Kubernetes等服务时,需要收集一些日志数据并且发送到Application Insights中,当使用SDK或者是服务自带的Application I ...
- 【Azure Function App】Nodejs Function遇见WorkerProcessExitException : node exited with code -1073740791 (0xC0000409) 错误
问题描述 Nodejs Function,使用Blob Trigger用于处理上传到Storage Blob的文件,但是最近发现偶发报错:Exception while executing funct ...
- 【Azure 应用服务】Azure Function App在部署时候遇见 503 ServiceUnavailable
问题描述 在VS Code中编写好 Azure Function App代码后,通过 func azure functionapp publish 部署失败,抛出 503 Service Unava ...
- VC-MFC 登陆界面 + 数据库账号+密码
1 // DlgUser.cpp : 实现文件 2 // 3 4 #include "stdafx.h" 5 #include "Login.h" 6 #inc ...