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-option
        v-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 = countryListData
        if (val) {
          this.countryList = countryListData.filter((item) => {
            return Object.keys(item).some((key) => {
              return String(item[key]).toLowerCase().indexOf(val.toLowerCase()) > -1
            })
          })
        }
      },
      visibleChange(visible){
        //这里是再次点击下拉时还原选项列表 by wu
        if(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 wu
  if(visible)this.countryList = countryListData
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试框架【面试准备】

前言 2023-9-12 12:12:04 2023-09-14 16:13:04 公开发布于 2024-5-22 00:16:21 以下内容源自《【面试准备】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://blog.csdn.net/qq_51625007 禁止其他平…

文件流下载优化:由表单提交方式修改为Ajax请求

如果想直接看怎么写的可以跳转到 解决方法 节&#xff01; 需求描述 目前我们系统导出文件时&#xff0c;都是通过表单提交后&#xff0c;接收文件流自动下载。但由于在表单提交时没有相关调用前和调用后的回调函数&#xff0c;所以我们存在的问题&#xff0c;假如导出数据需…

idea上传git命令

git init git remote add origin git add . git commit -m "标题" git push -u origin master

《Fundamentals of Power Electronics》——开关电源环路稳定性分析(中)

7.传递函数 传递函数&#xff0c;简单的理解就是输入和输出之间的关系。通过传递函数可以知道这个系统对不同频率信号响应&#xff0c;而这些响应通过画出传递函数的波特图又能知道传递函数在某点频率的相位和增益。一个系统要稳定可靠&#xff0c;那就需要一定的相位裕度和增…

基础3 探索JAVA图形编程桌面:逻辑图形组件实现

在一个宽敞明亮的培训教室里&#xff0c;阳光透过窗户柔和地洒在地上&#xff0c;教室里摆放着整齐的桌椅。卧龙站在讲台上&#xff0c;面带微笑&#xff0c;手里拿着激光笔&#xff0c;他的眼神中充满了热情和期待。他的声音清晰而洪亮&#xff0c;传遍了整个教室&#xff1a;…

【嵌入式芯片开发】不使用MicroLib的串口重定向万能预编译配置(适用于ARMCC、AC6等不同的编译器及版本)

【嵌入式芯片开发】不使用MicroLib的串口重定向万能预编译配置&#xff08;适用于ARMCC、AC6等不同的编译器及版本&#xff09; 文章目录 基本的串口重定向接收中断与scanf不能同时工作重定向卡死、低功耗一直唤醒 串口重定向万能预编译配置附录&#xff1a;Cortex-M架构的Sys…

2024042102-array-list

数组 Array 一、前言 数组是数据结构还是数据类型&#xff1f; 数组只是个名称&#xff0c;它可以描述一组操作&#xff0c;也可以命名这组操作。数组的数据操作&#xff0c;是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数据&#xff0c;而…

Qt moc系统的黑魔法?

Qt的元对象系统&#xff08;Meta-Object System&#xff09;是Qt框架的核心功能之一&#xff0c;为C语言增加了一些动态特性&#xff0c;借助元对象系统Qt可以实现以下功能 信号与槽机制&#xff08;Signals and Slots&#xff09;运行时类型信息&#xff08;Run-Time Type In…

倍思科技获14项红点设计奖,引领中国移动数码品牌创新风潮

近日,国际红点设计大奖公布了2024年获奖名单,中国移动数码品牌倍思科技凭借其出色的产品设计实力,一举斩获14项红点设计奖。这些获奖产品涵盖了充电、音频、车用等多个品类,展现了倍思科技在创新设计和实用功能方面的卓越成就。 红点设计奖作为世界知名设计竞赛,素有“设计界的…

【论文笔记】| 微调LLM晶体生成

【论文笔记】| 微调LLM晶体生成 Fine-Tuned Language Models Generate Stable Inorganic Materials as Text NYU, ICLR 2024 Theme&#xff1a;Material Generation Main work&#xff1a; 微调大型语言模型以生成稳定的材料 可靠性&#xff1a;在样本结构中&#xff0c;90% …

【因果推断从入门到精通二】随机实验3

目录 检验无因果效应假说 硬币投掷的特殊性何在&#xff1f; 检验无因果效应假说 无因果效应假说认为&#xff0c;有些人存活&#xff0c;有些人死亡&#xff0c;但接受mAb114治疗而不是ZMapp与此无关。在174例接受mAb14治疗的患者中&#xff0c;113/17464.9%存活了28天&…

7、按钮无法点击

不能点击&#xff0c;打开f12&#xff0c;删除disabled

基于python向量机算法的数据分析与预测

3.1 数据来源信息 该数据集来源于Kaggle网站&#xff0c;数据集中包含了罗平菜籽油的销售数据&#xff0c;每行数据对应一条记录&#xff0c;记录了罗平菜籽油销售数据。其中&#xff0c;菜籽产量、菜籽价格和菜籽油价格是数值型数据&#xff0c;共2486条数据。 通过读取Exce…

基于transformers框架实践Bert系列2--命名实体识别

本系列用于Bert模型实践实际场景&#xff0c;分别包括分类器、命名实体识别、选择题、文本摘要等等。&#xff08;关于Bert的结构和详细这里就不做讲解&#xff0c;但了解Bert的基本结构是做实践的基础&#xff0c;因此看本系列之前&#xff0c;最好了解一下transformers和Bert…

webSocket+Node+Js实现在线聊天(包含所有代码)

这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点 &#x1f4bb; 技术选型&#xff1a;使用 Node.js 搭建服务器&#xff0c;利用 Express 框架和 Socket.io 库实现 WebSocket 通信。 &#x1f4c4; 实现思路&#xff1a;通过建立数组存储聊天…

中国上市公司融资约束指数数据上市公司SA指数与WW指数(2000-2023年)

上市公司融资约束指数&#xff0c;是用来评估公司面临的融资限制程度的工具。SA指数由Hadlock和Pierce开发&#xff0c;基于公司规模和年龄计算&#xff0c;其中较小且较年轻的公司通常会有更高的指数值&#xff0c;表明其融资约束较大。另一方面&#xff0c;WW指数由Whited和W…

Linux .eh_frame section以及libunwind

文章目录 前言一、LSB二、The .eh_frame section2.1 简介2.2 The Common Information Entry Format2.1.1 Augmentation String Format 2.3 The Frame Description Entry Format 三、The .eh_frame_hdr section四、libunwind五、基于Frame Pointer和基于unwind 形式的栈回溯比较…

【计算机网络】初识Tcp协议

&#x1f4bb;文章目录 &#x1f4c4;前言Tcp基础概念Tcp 的报文格式三次握手四次挥手 Tcp的滑动窗口机制概念超时重传机制高速重传 TCP传输控制机制流量控制拥堵控制慢启动 Tcp的性能优化机制延迟应答捎带应答 &#x1f4d3;总结 &#x1f4c4;前言 TCP三次握手、四次挥手&…

【qt】QListWidget 组件

QListWidget 组件 一.QListWidget的用途二.界面设计三.QListWidget的添加1.界面添加2.代码添加 四.列表项的设置1.文本2.图标3.复选框4.列表大小 五.字体和图标的设置1.字体&#xff1a;2.图标&#xff1a; 六.设置显示模式1.图标2.列表 七.其他功能实现1.删除2.全选3.反选4.ad…

IO端口编址

统一编址 特点 独立编址 特点 内存地址分配 区别 应用 IO端口地址译码 硬件上的实现 示例1&#xff1a; 示例2&#xff1a; IO指令 软件上的实现 示例