element-ui手机区号+手机号

需求场景

项目开发中对方要求手机号带上全球区号

需求分析

项目使用的是若依前端框架,element-ui的框架。尝试使用已经网上的组件vue-country-intl等发现不怎么适配element-ui的样式等。这还不是关键的,关键的是弹窗中使用这些组件发现区号的下拉展示框展示不全,层级存在问题,设置css的z-index等相关属性也不能有效处理。于是决定手搓一个element-ul下拉的区号,支持国际化,支持中英文搜索过滤,支持自定义label展示,样式自己还能修改。

效果展示

英文(国际化)

中文

代码实现

组件代码

涉及整个组件代码(国家区号json、国旗)已上传到这里:

element-ui风格下拉手机区号组件资源-CSDN文库

主要代码index.vue

<template><div ><el-select v-model="currentCode"filterable :filter-method="dataFilter"@visible-change="visibleChange":placeholder="$t(placeholder)"@change="setCountryCode"style="width:100%"><el-optionv-for="dict in countryList":key="dict.code":label="`+${dict.dialCode}` ":value="dict.dialCode"><template v-if="currentUseChinese" #default><div v-if="showFlag" :class="['flag', `flag-${dict.code}`]"></div>{{dict.CNName}} +{{dict.dialCode}}</template><template v-else #default><div v-if="showFlag" :class="['flag', `flag-${dict.code}`]"></div>{{dict.name}} +{{dict.dialCode}}</template></el-option></el-select></div>
</template>
<script>import countryListData from '../VueCountryCodeSelector/assets/countryData.json'import Cookies from "js-cookie";export default {name: 'countryCodeSelector',props: {// placeholder显示内容placeholder: {type: String,default: "区号",},// 是否显示国旗showFlag: {type: Boolean,default: true,},/** @description 国际区号* */countryCode: {type: String,default: null}},data () {return {currentCode: this.countryCode?Number(this.countryCode):null,countryList: []}},computed: {// 根据props传过来的国际区号检索出所在的整个对象currentData () {return this.countryList.filter((item) => {return Object.keys(item).some((key) => {return item[key] === this.currentCode})})[0]},currentUseChinese(){let lg = Cookies.get('language') || 'zh-CN';if('zh-CN'!==lg){return false;}return true;},},created() {// 拿到JSON里面的国家区号数据并赋值到本地data中this.countryList = countryListData},methods: {// 根据输入框的内容进行模糊检索dataFilter(val) {//this.currentCode = val;this.countryList = countryListDataif (val) {this.countryList = countryListData.filter((item) => {return Object.keys(item).some((key) => {return String(item[key]).toLowerCase().indexOf(val.toLowerCase()) > -1})})}},visibleChange(visible){//这里是再次点击下拉时还原选项列表 by wuif(visible)this.countryList = countryListData},setCountryCode(){// 更改父组件的值this.$emit('update:countryCode', this.currentCode.toString());}},}
</script>
<style scoped>@import "../VueCountryCodeSelector/assets/css/flags.css";
</style>

组件使用

//main.js引入组件
//手机区号组件
import CountryCodeSelector from "@/components/VueCountryCodeSelector";
//全局挂载
Vue.component('CountryCodeSelector', CountryCodeSelector)......//页面中使用
<el-form-item :label="$t('CustomerInfo.managerPhone')" prop="managerPhone"><country-code-selector :showFlag="true" :placeholder="'CustomerInfo.managerPhoneZonePlaceholder'" :countryCode.sync="modForm.managerPhoneZone" style="width:24%;float: left"></country-code-selector>-<el-input v-model="modForm.managerPhone" autocomplete="off" maxlength="20" show-word-limit style="width:73%;"/>
</el-form-item>

组件参数说明

showFlag下拉中是否展示国旗
placeholderlabel的国际化显示文字
countryCode页面区号字段绑定的数据

总结

组件优化

组件其实有更多可扩充的空间,比如选择下拉后填充到页面是只展示区号还是支持展示国旗和国家名称,用的时候修改下这里就行:

开发经验总结

开发过程中主要学习了el-select自定义label展示、自定义过滤、父子传参等知识点。

自定义label展示如上图所示。自定义过滤使用了

filterable :filter-method="dataFilter"

这里dataFilter放到method中方法,执行你所需要的过滤,在页面输入过滤条件后会自动触发这个方法,我们只需要将下拉数据列表刷新下就行了(吗?)。

这里是有个坑的,当时做了后发现输入过滤条件后是过滤到了我们需要的数据,但是此时的下拉数据列表已经发生改变,在点开下拉发现还是上次过滤的数据,这就需要一个办法还原回原来的数据,查看官方文档看到了一个参数:

使用此参数在下拉框关闭时或者打开时还原下拉数据列表:

@visible-change="visibleChange"

方法

visibleChange(visible){//这里是再次点击下拉时还原选项列表 by wuif(visible)this.countryList = countryListData
}

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

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

相关文章

一文了解基于ITIL的运维管理体系框架

本文来自腾讯蓝鲸智云社区用户&#xff1a;CanWay ITIL&#xff08;Information Technology Infrastructure Library&#xff09;是全球最广泛使用的 IT 服务管理方法&#xff0c;旨在帮助组织充分利用其技术基础设施和云服务来实现增长和转型。优化IT运维&#xff0c;作为企业…

Docker 容器间通讯

1、虚拟ip/访问 同一网络 安装docker时&#xff0c;docker会默认创建一个内部的桥接网络docker0&#xff0c;每创建一个容器分配一个虚拟网卡&#xff0c;容器之间(包括宿主机)可以根据分配的ip互相访问(ps:其他主机(包括其他主机的容器)无法ping通docker容器ip无法访问&#…

【qt】标准项模型

标准项模型 一.使用标准型项模型1.应用场景2.界面拖放3.创建模型4.配套模型5.视图设置模型6.视图属性的设置 二.从文件中拿到数据1.文件对话框获取文件名2.创建文件对象并初始化3.打开文件对象4.创建文本流并初始化5.读取文本流6.关闭文件7.完整代码 三.为模型添加数据1.自定义…

pytorch在docker里面使用GPU

本博客主要介绍如何在容器里面使用pytorch进行推理&#xff0c;训练&#xff0c;同时用上GPU。 1. 前置条件&#xff0c;安装好docker。 2. 安装nvidia-container-toolkit 参考官方文档&#xff1a; Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.…

ctfshow web入门 其他 web396--web412

web396 <?php error_reporting(0); if(isset($_GET[url])){$url parse_url($_GET[url]);shell_exec(echo .$url[host].> .$url[path]);}else{highlight_file(__FILE__); } shell_exec(echo .$url[host].> .$url[path]); 这个是将url的host写入path,也就是说我们的pa…

el-table-column两种方法处理特殊字段,插槽和函数

问题&#xff1a;后端返回的字段为数字 解决办法&#xff1a; {{ row[item.prop] 1 ? "启用" : "禁用" }} {{ row[item.prop] }} 最终果&#xff1a; 另外&#xff1a;如果多种状态时可用函数 {{ getStatus(row[item.prop]) }} {{ row[item.prop…

IO游戏设计思路

1、TCP ,UDP ,KCP ,QUIC TCP 协议最常用的协议 UDP协议非常规的协议&#xff0c;因为需要在线广播&#xff0c;貌似运营商会有一些影响 KCP 基于UDP的协议&#xff0c;GitHub - l42111996/java-Kcp: 基于java的netty实现的可靠udp网络库(kcp算法)&#xff0c;包含fec实现&am…

WEB攻防【2】——ASPX/.NET项目/DLL反编译/未授权访问/配置调试报错

ASP&#xff1a;windowsiisaspaccess .net&#xff1a;windowsiisaspxsqlserver IIS上的安全问题也会影响到 WEB漏洞&#xff1a;本身源码上的问题 服务漏洞&#xff1a;1、中间件 2、数据库 3、第三方软件 #知识点: 1、.NET:配置调试-信息泄绵 2、.NET:源码反编译-DLL…

【openlayers系统学习】3.5colormap详解(颜色映射)

五、colormap详解&#xff08;颜色映射&#xff09; ​colormap​ 包是一个很好的实用程序库&#xff0c;用于创建颜色图。该库已作为项目的依赖项添加&#xff08;1.7美化&#xff08;设置style&#xff09;&#xff09;。要导入它&#xff0c;请编辑 main.js​ 以包含以下行…

【Numpy】深入解析numpy.mat()函数

numpy.mat()&#xff1a;深入探索NumPy中的矩阵类 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f393; 博主简…

Spring Cloud 系列之Gateway:(9)初识网关

传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos&#xff1a;(3)服务注册发现 Spring Cloud 系列之OpenFeign&#xff1a;(4)集成OpenFeign Spring Cloud …

使用霍尔效应传感或磁场传感技术的应用

随着支持技术的增强&#xff0c;使用霍尔效应传感或磁场传感技术的应用目前已变得有效。本技术文档介绍了霍尔效应技术&#xff0c;并对应用进行了回顾&#xff0c;特别是区分霍尔传感器 IC 的主要类型以及它们可以支持的各种传感行为。此外&#xff0c;它还探讨了一些使能技术…

Spring Cache基本使用

Spring 从 3.1 版本开始定义缓存抽象来统一不同的缓存技术&#xff1b;在应用层面与后端存储之间&#xff0c;提供了一层抽象&#xff0c;这层抽象目的在于封装各种可插拔的后端存储( ehcache, redis, guava)&#xff0c;最小化因为缓存给现有业务代码带来的侵入。 一、Spring…

Vue从入门到实战Day11

一、为什么要学Vue3 Vue3官网&#xff1a;简介 | Vue.js 1. Vue3的优势 2. Vue2选项式API vs Vue3组合式API 示例&#xff1a; 二、create-vue搭建Vue3项目 1. 认识create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了vite(下一代构建工具)&#xff0c;为…

jenkins插件之Warnings

Warnings插件&#xff0c;收集静态分析工具报告的编译器警告或问题&#xff0c;并将结果可视化。它内置了对许多编译器的支持&#xff08;cpp&#xff0c;clang&#xff0c;java等&#xff09;和工具&#xff08;spotbugs&#xff0c;pmd&#xff0c;checkstyle&#xff0c;esl…

Java操作Word文档,根据模板生成文件

Java操作Word文档 poi-tl介绍 官方文档&#xff1a;https://deepoove.com/poi-tl/ poi-tl&#xff08;poi template language&#xff09;是Word模板引擎&#xff0c;使用模板和数据创建很棒的Word文档。 在文档的任何地方做任何事情&#xff08;Do Anything Anywhere&#…

el-select可选择可搜索可输入新内容

需求&#xff1a;el-form-item添加el-select&#xff0c;并且el-select可选择可搜索可输入新内容&#xff0c;并且和其他的el-input做联动&#xff0c;如果是选择&#xff0c;那么el-input自动回填数据并且不可编辑&#xff0c;如果el-select输入新的内容&#xff0c;那么el-in…

【NumPy】关于numpy.transpose()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?

网站安全性在当今至关重要&#xff0c;Google reCAPTCHA 作为防止垃圾邮件和滥用行为的前线防御系统起着关键作用。reCAPTCHA 站点密钥是确保网站交互由人类驱动的唯一标识符。了解如何找到这个密钥对于网站管理员和开发人员来说至关重要。 什么是 reCAPTCHA 站点密钥 reCAPT…

MySQL主从复制(一):主备一致

MySQL主备的基本原理 如图所示就是基本的主备切换流程&#xff1a; 在状态1中&#xff0c; 客户端的读写都直接访问节点A&#xff0c; 而节点B是A的备库&#xff0c; 只是将A的更新都同步过来&#xff0c; 到本地执行。 这样可以保持节点B和A的数据是相同的。 当需要切换的时候…