Vant中 索引栏(IndexBar)自定义使用

简介: Vant中 索引栏(IndexBar)自定义使用

1. 索引栏(IndexBar )自定义使用

传送门:Vue中 引入使用 js-pinyin 实现汉字转拼音

完整代码:

<template>
  <div class="wrap">
    <van-index-bar 
      highlight-color="#1989fa"
      :index-list="indexList">
      <div v-for="item in filterData" :key="item.letter">
        <van-index-anchor :index="item.letter"></van-index-anchor>
        <div   
          class="content"      
          v-for="row in item.list" 
          :key="row.value">{{row.label}}</div>
      </div>
    </van-index-bar> 
  </div>
</template>
<script>
export default {
  name:'test',
  data(){
    return {
      indexList:[], // 索引字符
      filterData:[], // 处理后的 待渲染数据
    }
  },
  methods:{
    test(){
      let mapData = [
        {
          label: '北京市',
          value: '110000',
        },{
          label: '天津市',
          value:'120000',
        },{
          label:'河北省',
          value:'130000',
        },{
          label:'山西省',
          value:'140000',
        },{
          label:'内蒙古自治区',
          value:'150000',
        },{
         label:'辽宁省',
         value:'210000',
        },{
          label:'吉林省',
          value:'220000',
        },{
         label:'黑龙江省',
         value:'230000',
        },{
          label:'上海市',
          value:'310000',
        },{
          label:'江苏省',
          value:'320000',
        },{
          label:'山东省',
          value:'370000',
        },{
          label:'河南省',
          value:'410000',
        },{
          label:'湖北省',
          value:'420000',
        },{
          label:'湖南省',
          value:'430000',
        },{
          label:'广东省',
          value:'440000'
        },{
          label:'广西壮族自治区',
          value:'450000',
        },{
          label:'海南省',
          value:'460000',
        },{
          label:'台湾省',
          value: '710000',
        },{
          label:'香港特别行政区',
          value:'810000',
        },{
          label:'澳门特别行政区',
          value:'820000',
        }
      ];
      // 安装使用 js-pinyin 插件,获取待处理字段的拼音
      const pinyin = require('js-pinyin');
      mapData.map(item => { item.pinyin = pinyin.getFullChars(item.label); });
      let provice = {};          
      mapData.map((item) => {         
        const Initials = item.pinyin[0].toUpperCase();      
        // 如果对象里有当前字母项则直接 push 一个对象,如果没有则创建一个新的键并赋值;     
        if (provice[Initials]) {     
          provice[Initials].push(item);       
        } else {     
          provice[Initials] = [item];      
        }       
      });
      // 将数据转为数组,并按字母顺利排列
      this.filterData = [];  
      for(let key in provice) {
        const obj = { letter: key, list:provice[key] };
        this.filterData.push(obj)
      }    
      this.filterData.sort((a,b) => { return a.letter.localeCompare(b.letter) });
      // 为索引字符数组赋值
      this.indexList = [];
      this.filterData.forEach(item => this.indexList.push(item.letter));
      console.log('filterData',this.filterData)
    },
  },
  mounted(){
    this.test();
  },
}
</script>
<style lang="scss" scoped>
.content{
  font-size: 15px;
  padding: 6px 0;
  border-bottom: 1px solid #eeeeee;
}
</style>

处理后的待渲染数据

2020062310470442.png

效果:

20201204182323419.gif

2. 拓展:关于 localeCompare() 方法相关知识

定义和用法: 用本地特定的顺序来比较两个字符串。

语法:

stringObject.localeCompare(target)
参数 描述
target 要以本地特定的顺序与 stringObject 进行比较的字符串。

返回值:

说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

说明:

把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。

localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。


相关文章
|
JavaScript
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
Vue使用Element的表格Table显示树形数据,多选框全选无法选中全部节点
1613 0
|
移动开发 JavaScript 小程序
小程序开发.uniapp.生命周期
小程序开发.uniapp.生命周期
838 0
|
编解码 人工智能 运维
南加大提出全新通用时间序列基础模型TimeDiT!基于扩散模型创新物理约束机制
 【10月更文挑战第10天】南加大提出TimeDiT模型,创新融合扩散模型与Transformer架构,针对真实世界时间序列数据的复杂性,如多分辨率、缺失值等问题,提供高效解决方案。该模型通过新颖的掩码机制和无微调编辑策略,实现多任务处理及物理知识集成,显著提升预测和异常检测的准确性和鲁棒性。
424 3
|
资源调度 JavaScript 前端开发
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
这篇文章介绍了在Vue 2项目中如何通过`v-viewer`插件实现图片的预览、切换、缩放、旋转等功能,并提供了插件的安装、配置和使用方法。
4165 0
Vue2项目使用v-viewer插件实现图片预览、切换、缩放、旋转...
|
移动开发 资源调度 JavaScript
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
这篇文章介绍了在Vue移动端网页中使用`pdfh5`和`vue-pdf`两个插件来实现PDF文件的预览,包括滚动查看、缩放、添加水印、分页加载、跳转指定页数等功能。
9152 1
Vue移动端网页(H5)预览pdf文件(pdfh5和vue-pdf)
|
前端开发 JavaScript UED
"前端小技巧大揭秘:JS如何将后台时间戳秒变亲切小时前、分钟前,让用户秒懂,提升互动体验!"
【10月更文挑战第23天】在Web开发中,将后台返回的时间戳转换为“小时前”、“分钟前”、“刚刚”等友好的时间描述是常见需求。本文介绍如何用JavaScript实现这一功能,通过计算当前时间和时间戳的差值,返回相应的描述,提升用户体验。
261 1
|
JavaScript
vant(一)基于picker单选组件自定义picker多选组件~
vant(一)基于picker单选组件自定义picker多选组件~
1932 0
|
缓存 API Android开发
Android经典实战之Kotlin Flow中的3个数据相关的操作符:debounce、buffer和conflate
本文介绍了Kotlin中`Flow`的`debounce`、`buffer`及`conflate`三个操作符。`debounce`过滤快速连续数据,仅保留指定时间内的最后一个;`buffer`引入缓存减轻背压;`conflate`仅保留最新数据。通过示例展示了如何在搜索输入和数据流处理中应用这些操作符以提高程序效率和用户体验。
235 6
|
前端开发 JavaScript CDN
pinyin-pro的基本使用
pinyin-pro的基本使用
482 0
|
小程序 开发者 Windows
安装VantWeapp开发微信小程序
安装VantWeapp开发微信小程序
406 0