uni app 自定义 带popup弹窗的input组件

news2025/6/28 8:36:54

工作需要。自定义了个带popup弹窗的input组件。此组件满足个人需求,不喜勿喷。应该可以看明白怎么回事,也能自己改改,所以就不要联系了,点赞收藏就好

<template>
	<view class="dialog_main">
		<input v-model="inputvalueClone" class="select_input" placeholder-class="down_select_input_placeholder"
			placeholder="请输入或选择" @focus="input_focus" @input="input_value" />
		<view class="select_mian" v-if="showPickerClone">
			<view class="button_main">
				<text></text>
				<text class="button_name" @click="qd_click">确定</text>
			</view>
			<scroll-view v-if="showPickerClone" class="scroll_y" :scroll-y="true">
				<view class="list_main" :id="index" v-for="(item, index) in datalistClone" :key="index">

					<text v-if="!item.ishow" @click="item_click(item)" class="item_name">{{ item[showkey]  }}</text>
				</view>
			</scroll-view>
		</view>




	</view>
</template>

<script>
	import myclient from '../../utils/myclient.js'
	import utils from '../../utils/utils.js';
	export default {
		data() {
			return {
				inputvalueClone: "",
				showPickerClone: false,
				datalistClone: [],
				selectedIndex: 0, // 当前选中的索引  
			};
		},
		/**
		 * 组件的属性列表
		 */
		props: {

			showkey: {
				type: String,
				default: ''
			},
			clienturl: {
				type: String,
				default: ''
			},


			paramsvalue: {
				type: String,
				default: ''
			},
			params: {
				type: Object,
				default: ''
			},

			reqmethod: {
				type: String,
				default: 'POST'
			},
			datapath: {
				type: String,
				default: ''
			},
			inputvalue: {
				type: String,
				default: ''
			},



			callback: {
				type: String,
				default: ''
			}
		},
		/**
		 * 组件的方法列表
		 */
		methods: {
			input_value: function(e) {
				var value = e.detail.value
				this.inputvalueClone = value
				if (value.length == 0) {

					this.datalistClone = utils.setShow(this.datalistClone, true)


				} else {
					for (var i = 0; i < this.datalistClone.length; i++) {
						this.datalistClone[i].ishow = true

						if (this.datalistClone[i][this.showkey].indexOf(value) >= 0) {
							this.datalistClone[i].ishow = false


						}
					}
					this.$forceUpdate()
				}


			},
			input_focus: function() {
			 
				var that = this
				myclient.callGetorPost(this.clienturl, this.reqmethod, this.params, false, function(res) {


					var paths = that.datapath.split('.');
					var datas = res;

					for (let i = 0; i < paths.length; i++) {
						datas = datas[paths[i]];

					}

					if (that.inputvalueClone.length == 0) {

						that.datalistClone = utils.setShow(datas, true)


					} else {
						for (var i = 0; i < datas.length; i++) {
							datas[i].ishow = true

							if (datas[i][that.showkey].indexOf(that.inputvalueClone) >= 0) {
								datas[i].ishow = false


							}
						}
						that.datalistClone = datas
					}


					that.showPickerClone = true
				})


			},

			item_click(e) {
				this.showPickerClone = false
				this.$emit('callBack', {
					detail: e,
					value: this.inputvalueClone
				});
			},
			qd_click: function() {
				this.showPickerClone = false
				this.$emit('callBack', {

					value: this.inputvalueClone
				});
			}

		},
		watch: {
			inputvalue: {
				handler: function(newval, oldval) {
					this.inputvalueClone = newval
				},
				immediate: true
			}

		}
	};
</script>

<style lang="scss" scoped>
	@function tovmin($rpx) {
		//$rpx为需要转换的字号
		@return #{$rpx * 100 / 750}vmin;
	}

	.dialog_main {
		width: 100vw;
		display: flex;
		flex-direction: column;
	}

	.select_mian {
		width: 80vw;
		min-height: 10vh;
		max-height: 50vh;
		box-shadow: 0rpx 0rpx 12rpx 0rpx rgba(7, 165, 166, 0.11);
		z-index: 2;
		border: solid 2rpx #efefef;
	}

	.button_main {
		width: 100%;
		height: 80rpx;
		display: flex;
		flex-direction: row;
		border-bottom: #00a99d dotted 2rpx;
		justify-content: space-between;
	}

	.button_name {
		color: #00a99d;
		display: flex;
		align-items: center;
		text-align: center;
		justify-content: center;
		width: 100rpx;
		height: 100%;

	}

	/* 在这里添加你的样式 */
	.scroll_y {
		width: 100%;
		height: 100%;
	}

	.list_main {
		width: 100vw;

		display: flex;
		flex-direction: column;
		align-items: center;
		vertical-align: center;
	}

	.item_name {
		font-size: 28;
		padding-top: 5rpx;
		padding-bottom: 5rpx;
		width: 100%;
		min-height: tovmin(80);
		display: flex;
		align-items: center;
		justify-content: center;
		text-align: left;

		margin-right: tovmin(32);
		color: #333;
		font-weight: 600;
		overflow-y: auto;
		overflow-x: scroll;
		align-items: center;
		border-bottom: solid #efefef 2rpx;
		white-space: normal;
		word-break: break-all;
		word-wrap: break-word;
	}

	.select_input {

		color: #333;

		margin-bottom: 10rpx;
		padding: 0 20px 0px 0px;
		font-size: 14px;

		flex: 1;
		font-weight: 600;


	}
</style>

讲一下:

        myclient 封装的网络请求

        utils 是封装的工具类,setshow 是给各个对象添加一个字段isshow  用户对象是否展示出来

        showkey 列表中要展示的字段,比如name

        clienturl  要访问的接口获取列表数据

        paramsvalue 输入框输入的值放在接口参数的那个字段  比如keyword  //本示例中么有用此字段的后面会加上

        params   接口参数

        reqmethod 接口请求方式  GET  POST

        datapath 接口返回的数据取支路径 例如data.data.list

        inputvalue 输入框默认值,也就是 keyword的默认值例如 params={keyword:5} 那么 inputvalue=5

        callback:点确定或 列表回调

使用:

        要使用的页面 增加

        import inputselectVue from './component/inputselect.vue';

        components: {
           
            inputselectVue,

        },


         <inputselectVue class="select_input" showkey="strname"
                 :clienturl="strurl" :params="{keyword:0}" reqmethod="POST"
                  datapath="data.data.list" :inputvalue=" strname"
                   @callBack="name_callback">
          </inputselectVue>

        name_callback: function(e) {
                console.log(JSON.stringify(e))

                if (e.detail) {

                    this.strname= e.detail.strname;

                } else {
                     this.strname= e.detail.value;  

                }

                this.$forceUpdate()
        },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【第七篇】SpringSecurity核心组件和核心过滤器

一、SpringSecurity中的核心组件 在SpringSecurity中的jar分为4个,作用分别为 jar作用spring-security-coreSpringSecurity的核心jar包,认证和授权的核心代码都在这里面spring-security-config如果使用SpringSecurity XML命名空间进行配置或者SpringSecurity的<br />J…

Python 使用 Tkinter库 设置 tkinter ttk 框架的背景颜色

Tkinter 设置 tkinter ttk 框架的背景颜色 在本文中&#xff0c;我们将介绍如何使用 Tkinter 在 tkinter ttk 框架中设置背景颜色。Tkinter 是 Python 中常用的 GUI 工具包&#xff0c;ttk 则是 Tkinter 中的一个模块&#xff0c;提供了一套更加现代化的控件。 Tkinter 简介 …

ESP32基础应用之esp32连接腾讯云并使用微信小程序控制的智能灯

文章目录 1. 项目简介1.1 功能接收1.2 使用资源1.3 测试平台 2 腾讯云物联网开发平台3 esp32设备开发3.1 准备参考例程3.2 vscode平台创建测试工程3.3 修改工程 问题总结使用PowerShell命令行终端生成的二维码不能用 1. 项目简介 1.1 功能接收 实现腾讯云创建项目与设备&…

泰坦尼克号数据集机器学习实战教程

泰坦尼克号数据集是一个公开可获取的数据集&#xff0c;源自1912年沉没的RMS泰坦尼克号事件。这个数据集被广泛用于教育和研究&#xff0c;特别是作为机器学习和数据分析的经典案例。数据集记录了船上乘客的一些信息&#xff0c;以及他们是否在灾难中幸存下来。以下是数据集中主…

微信小程序查分易如何使用?

期末马上到了&#xff0c;老师们又开始为发放成绩而头疼了&#xff0c;堆积如山的试卷&#xff0c;密密麻麻的分数&#xff0c;还有那些不断响起的家长电话&#xff0c;真是让人心烦。别担心&#xff0c;今天就让我来介绍一个让老师“偷懒”神器——查分易微信小程序 第一步&am…

Qt创建静态库及静态库使用

Qt创建静态库及静态库使用 1. 创建一个库文件 选择静态库 将需要打包的.h 和.cpp文件添加到程序中&#xff0c; 在编译器版本下的debug和release模式下分别编译&#xff08;右键项目&#xff0c;点击“qmake”,再点击“构建”&#xff09;后&#xff0c;在对应的的build目录下…

区间分割求解方程

本文实现了基于mpi4py的多进程算法 mpi不过多介绍&#xff0c;某些函数的用法也不是介绍范围&#xff0c;这里只给出怎么实现多进程的方程求根算法。区间划分求解方程&#xff0c;在串行程序里&#xff0c;二分法是非常经典的算法&#xff0c;现在对其进行拓展&#xff0c;实现…

Kubrnetes APIServe 监控

kube-apiserver组件监控指标及大盘使用说明_容器服务 Kubernetes 版 ACK(ACK)-阿里云帮助中心 kube-apiserver组件提供了Kubernetes的RESTful API接口&#xff0c;使得外部客户端、集群内的其他组件可以与ACK集群交互。本文介绍kube-apiserver组件的监控指标清单、大盘使用指导…

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求&#xff0c;常用做法是左侧显示子页面菜单&#xff0c;用户通过点击左侧菜单&#xff0c;实现右边子页面的展示。 实例项目实现&#xff1a; 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…

苹果设备上的livp格式是什么?怎么转换?

livp格式是苹果公司推出的一种图片格式&#xff0c;它允许用户在iOS设备上拍摄的照片中包含声音和动作&#xff0c;从而创造出一种动态的照片效果。 livp格式的照片不仅记录了图像&#xff0c;还记录了拍摄前后1.5秒的音频和视频&#xff0c;使得照片能够“活”起来。 ✨livp…

植物大战僵尸(杂交版)最新版V2.1来袭!

【新手指导】最新版v2.1来袭 1.闪退怎么办&#xff1f; 答:窗口模式可以解决大部分问题。输入法转换成英文也可以。最后一种办法管理员运行&#xff0c;再后台可运行&#xff0c;即便不是窗口也不会闪退&#xff0c;亲测有效 2.哪里下载&#xff1f; 答&#xff1a;夸克网盘htt…

【Android】实现Recyclerview的Item可以左右侧滑动的效果

项目需要 使用Recyclerview进行列表的数据加载的时候&#xff0c;需要对这个Item进行左右滑动进行操作的功能&#xff0c; 比如这样 需求实现 上面图来源于 https://github.com/anzaizai/EasySwipeMenuLayout 这是一个可以用来进行列表左滑、右滑的项目&#xff0c;可以集…

盒马鲜生礼品卡如何使用?

盒马鲜生的礼品卡除了在门店用以外&#xff0c;还有什么用处啊 毕竟家附近的盒马距离都太远了&#xff0c;好多卡最后都闲置下来了&#xff0c;而且以前都不知道盒马卡还会过期&#xff0c;浪费了好多 还好最近发现了 盒马鲜生礼品卡现在也能在收卡云上兑现了&#xff0c;而且…

01_点亮LED

这节课的标题是点亮 LED&#xff0c;虽然任务很简单&#xff0c;但是需要大家了解的单片机基础知识的内容却很多&#xff0c;特别是对于初学者&#xff0c;刚开始要在头脑中建立一个单片机的概念&#xff0c;课程最后通过点亮一个 LED 小灯来增加初学者对单片机的兴趣和自信。 …

GLS-3004K 端子排静态双位置继电器 AC115V 导轨安装约瑟 JOSEF

系列型号&#xff1a; GLS-3002K端子排静态双位置继电器&#xff1b; GLS-3204K端子排静态双位置继电器&#xff1b; GLS-3220端子排静态双位置继电器; GLS-3004K端子排静态双位置继电器; 一、用途 GLS系列端子排静态双位置继电器用于交直流操作的各种保护与自动控制系统中,作为…

Dubbo-使用zookeeper作为注册中心时节点的概述

本文内容很容易理解&#xff0c;会阐述当dubbo使用zookeeper作为注册中心时候&#xff0c;zookeeper节点是什么样子的 本文的代码使用的dubbo版本是2.7.x&#xff0c;几年前的版本了&#xff0c;但是不影响探究 首先我们创建一个简单的maven项目&#xff0c;然后写出一段dubb…

分布式事务的八种方案解析(1)

针对不同的分布式场景业界常见的解决方案有2PC、TCC、可靠消息最终一致性、最大努力通知等方案&#xff0c;以下总结8 种常见的解决方案&#xff0c;帮助大家在实际的分布式系统中更好地运用事务。 1.2PC 二阶段提交协议&#xff08;Two-phase commit protocol&#xff09;&…

Tensorflow入门实战 T04-猴痘识别

本篇文章主要&#xff1a;tensorflow 运行环境&#xff1a;本地cpu 运行epoch&#xff1a;50 1、tensorflow官网 tensorflow的官网教程。初学者的 TensorFlow 2.0 教程 | TensorFlow Core 官网上有图像分类的相关详细描述还有代码示例。 2、完整代码展示 from tensorflo…

进阶篇04——视图

简介及基本语法 视图的检查选项 可以通过视图进行数据的增删改查操作&#xff0c;但由于视图是一张虚拟表&#xff0c;所以操作的实际上是视图的基表&#xff0c;即创建视图时select语句操作的表 cascaded 自己还测试了一下这种情况&#xff1a;当V1和V2都没有加检查选项&…

华三HCL模拟器安装及华三防火墙配置

0、前言 最近跟模拟器杠上了&#xff0c;主要是需要运行防火墙&#xff0c;目前已经成功模拟出华为、山石防火墙&#xff0c;而且模拟出来的设备能与物理网络环境进行互联。现在我又盯上华三防火墙了。 首先下载模拟器&#xff1a; 下载地址&#xff1a;H3C网络设备模拟器官方免…