Vue 可输入可下拉组件的封装
由于业务需要,需要一个可输入也可下拉的组件,看了iview没有现成的组件用,就自己封装了个小组件~~
组件input-select.vue代码:
<template>
<div class="input-container">
<!-- 显示的输入框,用v-model绑定数据,并且绑定focus事件 -->
<Input class="input-number" v-model="inputData" @on-focus="_showInputNumber" />
<!-- -->
<div class="input-dropdown-wrap">
<Dropdown trigger="custom" :visible="visibNormal" class="input-dropdown">
<Dropdown-menu slot="list">
<div class="dropdown-list">
<Row class="item" v-fot="item of arrayList" :value="item.code" :key="item.code" @click.native="_inputNumChange(item.code)">{{item.text}}</Row>
</div>
</Dropdown-menu>
</Dropdown>
</div>
</div>
</template> <script>
/**
* 输入下拉框
* @author mino
* @version 1.0.0
* @description 可输入,也可展开下拉框进行选择
*/
export default {
data() {
return {
inputData: '1', //输入框的默认值
visibNormal: false //下拉显示控制
}
},
props: {
arrayList: { //下拉列表的数据
type: Array,
default: []
}
},
watch: {
inputData(newVal) {
this.$emit('getInputNum', newVal);
}
},
methods: {
//展示下拉选项
_showInputNumber(e) {
let _this = this;
if(this.visibNormal) return; this.visibNormal = true;
//给输入框元素加入阻止冒泡事件
e.target.addEventListener('click', (e) => {
e.stopPropagation();
});
document.addEventListener('click', _this._hideNormal);
},
//下拉框列表的点击事件
_inputNumChange(data) {
this.$emit('getInputNum', data);
},
//隐藏下拉框
_hideNormal() {
let curTarget = event.target;
if(curTarget.nodeName === 'SPAN' && curTarget.classList.contains('switch)) {
return;
} this.visibNormal = false;
document.removeEventListener('click', this._hideNormal);
}
}
}
</script> <style scoped lang="less">
.input-container {
/deep/ .input-dropdown-wrap {
height: 0 !important;
overflow: hidden;
}
.dropdown-list {
height: 1.3rem;
overflow: auto;
border-bottom: .01rem solid #E4E4E4;
.item {
line-height: .25rem;
padding-left: .15rem;
&:hover {
background: grey;
}
}
}
.input-number {
width: 2.2rem;
}
.input-dropdown {
width: 2.2rem;
/deep/ .ivu-select-dropdown {
margin-top: -.2rem;
}
}
}
</style>
调用该组件的组件index.vue代码块为:
<template>
<div class="main-container">
<inputSelect :arrayList="_arrayList" @getInputNum="_getInputNum" />
</div>
</template> <script>
/**
* 输入下拉组件引用主入口
* @author mino
* @version 1.0.0
* @description 引用输入下拉组件
*/
import inputSelect from './input-select';
export default {
data() {
return {
_arrayList: [
{
code: '1',
text: '111'
},
{
code: '3',
text: '333'
},
{
code: '5',
text: '555'
}
],
inputSelectData: '' //接收子组件的值
}
},
components: {
inputSelect
},
methods: {
//获取子组件的值
_getInputNum(data) {
console.log('this is data of input-select: ', data);
this.inputSelectData = data;
}
}
}
</script>
Vue 可输入可下拉组件的封装的更多相关文章
- js实现可输入的下拉框
<HTML> <HEAD> <META http-equiv='Content-Type' content='text/html; charset=gb2312'> ...
- amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown
amazeui学习笔记--js插件(UI增强4)--下拉组件Dropdown 一.总结 1.am-dropdown(及其孩子):控制下拉列表的样式 2.data-am-dropdown(及其孩子):控 ...
- vue 表格中的下拉框单选、多选处理
最近在用vue做前后端分离,需要在表格中用到下拉框,由于需求变动,从最开始的单选变为多选,折腾了许久,记录一下,供后人铺路 vue 中的表格下拉框单选 collectionsColnumOptions ...
- Vue自定义指令实现下拉加载:v-loadmore
和methods平级: directives: { loadmore: {//自定义指令: 下拉加载 bind(el, binding) { var p = 0; var t = 0; ...
- vue的jsonp百度下拉菜单
通过vue的jsonp实现百度下拉菜单的请求,vue的版本是2.9.2 <!DOCTYPE html> <html lang="en"> <head& ...
- Html5下拉控件同时支持文本输入和下拉代码
有时候,下拉框不能满足我们的业务需求,还需要同时支持用户输入内容,默认的select标签是不支持用户输入的,下面我说一下原生的select如何支持用户输入,代码如下: <!DOCTYPE htm ...
- vue实现百度搜索下拉提示功能
这段代码用到vuejs和vue-resouece.实现对接智能提示接口,并通过上下键选择提示项,按enter进行搜索 <!DOCTYPE html> <html lang=" ...
- vue 获取数据联动下拉框select ,并解决报Duplicate value found in v-for="...": "". Use track-by="$index" 错误
公司项目中遇到一个问题,联动下拉框,并且数据是使用vue-resource从后台获取的,格式不利于输出联动下拉框,联动下拉框是第一个下拉框输出一个数组里每一项json的一个text值,从而第二下拉框输 ...
- jquery模拟可输入的下拉框
//页面html <div id="select" class="select" > <ul> <c:forEach items= ...
随机推荐
- 小程序之hover-class
hover-class 属性主要是用来来指定元素的点击态效果.但是在在使用中要注意,大部分组件是不支持该属性的. 目前支持 hover-class 属性的组件有三个:view.button.navig ...
- Podfile
platform :ios, "9.0" target "APPName" dopod 'AFNetworking'pod 'SVProgressHUD'pod ...
- Container 组件
Container 组件 padding: const EdgeInsets.fromLTRB(10, 0, 30, 0),//内边距 margin: const EdgeInsets ...
- 腾讯广告联盟 Android SDK(广点通)demo的使用方式
1. 下载示例文件. 2. 解压之后的目录: 3. 使用android studio,选择import project,导入如图所示文件夹: 4. 重点来了,由于官方demo的上传时间很久远(大概是上 ...
- C# DES加密类,16位的加密。
这个加密类是与java写的DES加密不同时,自己写的,最后与Java的加密相同了,解决了加密后不同的问题. 可以直接调用里面的加密和解密的方法. using System; using System. ...
- Ubuntu-18.04.2-几个启动错误解决办法
问题如图: 这里三个问题: 1. piix4_smbus: SMBus Host controller not enabled.(i2c_piix4模块所致,因为系统找不到这个模块,所以报错) 解决办 ...
- 学习笔记DL005:线性相关、生成子空间,范数,特殊类型矩阵、向量
线性相关.生成子空间. 逆矩阵A⁽-1⁾存在,Ax=b 每个向量b恰好存在一个解.方程组,向量b某些值,可能不存在解,或者存在无限多个解.x.y是方程组的解,z=αx+(1-α),α取任意实数. A列 ...
- python excle读
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/4/24 9:57 # @File : Excel读.py # @Softwa ...
- rapid7/metasploitable3 CTF摘要
rapid7/metasploitable3 俗话说,没图说个JB.我专门做了个图以供欣赏,做图技术可能有点糙,见谅见谅. 2016年11月,rapid7发布了metasploitable3,以后简称 ...
- [PYTHON]_ELVE_Python源代码文件编译成可执行文件(支持macOS High Sierra和window 10)
#0x01 背景 这两天写了一个抽奖的Python脚本,要生成可执行文件,总不能一直在sublime上运行吧,或者运行前先安装Python,所以就查了一下怎么生成可执行文件,本篇包括mac下和win下 ...