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 整 ...
随机推荐
- NC17872 CSL的校园卡
题目链接 题目 题目描述 今天是阳光明媚,晴空万里的一天,CSL早早就高兴地起床走出寝室到校园里转悠. 但是,等到他回来的时候,发现他的校园卡不见了,于是他需要走遍校园寻找它的校园卡.CSL想要尽快地 ...
- java 注解结合 spring aop 实现自动输出日志
auto-log auto-log 是一款为 java 设计的自动日志监控框架. 创作目的 经常会写一些工具,有时候手动加一些日志很麻烦,引入 spring 又过于大材小用. 所以希望从从简到繁实现一 ...
- spring boot+layui实现增删改查实战
说明: 最近在做一个后台,希望用一个现成的前端模板,找了一圈发现Layui比较合适.我知道很多人都有这个需求,为了使大家快速上手,我把自己写的最实用的增删改查案例完整的展示出来. 源码地址: http ...
- cf的几道小题
1.E - Fridge 教训:做题的时候,没有想清楚问题,把问题复杂化了 #include <bits/stdc++.h> #define int long long using nam ...
- 树莓派开发笔记(十六):树莓派4B+安装mariadb数据库(mysql开源分支)并测试基本操作
前言 树莓派使用数据库时,优先选择sqlite数据库,但是sqlite是文件数据库同时仅针对于单用户的情况,考虑到多用户的情况,在树莓派上部署安装mariadb数据库服务(mysql的开源分支), ...
- [golang] 变量声明和初始化 var, :=, new() 和 make()
[golang] 变量声明和初始化 var, :=, new() 和 make() 说明 go语言中,提供了多种变量声明和初始化的方法.这里着重一一说明.并提供一个简单的指南. 指南 使用make() ...
- 【Azure API 管理】APIM中证书更新问题
问题描述 每一年到期更新域名证书,APIM会中断服务,请问如何不中断服务? 问题解答 Azure API 管理允许在受信任的根证书和中间证书存储中的计算机上安装 CA 证书,分配证书的过程可能需要 1 ...
- 【Azure 环境】如果Azure中的某一个资源被删除后是否可以查看到删除的记录呢?如Resource Group
问题描述 当一个资源从Azure中删除后,是否有地方可以查看到这些操作的记录呢?如操作人,操作时间等. 问题解答 可以的.通过 Azure订阅页面的活动日志,可以查看所有对订阅下资源的操作记录,包含D ...
- Nebula Graph 在众安保险的图实践
本文首发于 Nebula Graph Community 公众号 互联网金融的借贷同传统信贷业务有所区别,相较于传统信贷业务,互联网金融具有响应快.数据规模大.风险高等特点.众安保险主要业务是做信用保 ...
- 各大OA调试账户默认账户口令
1.今目标地址:http://web.jingoal.com/mgt/用户名:admin@8216261密码:1a2s3d4f5g2.IBOS博思协同地址:http://demo.ibos.com.c ...