手把手Vue移动端使用vant完成索引栏功能

背景

写选择手机号码前缀功能,需要使用索引栏,遂到框架内找到,并在网上找到数据


image.png

image.png

开始

1.安装vant:https://vant-contrib.gitee.io/vant/#/zh-CN/index-bar
vant 上有写好的框架,能省很多力气,我一向是有框架绝对不自己写轮子

2.数据

export let country = {
    'hot': [
        ["中国大陆", "+86"],
        ["香港", "+852"],
        ["澳门", "+853"],
        ["台湾", "+886"],
        ["美国", "+1"],
        ["日本", "+81"],
    ],
    "A": [
        ["阿尔巴尼亚", "+355"],
        ["阿尔及利亚", "+213"],
        ["阿富汗", "+93"],
        ["阿根廷", "+54"],
        ["阿鲁巴岛", "+297"],
        ["阿曼", "+968"],
        ["阿塞拜疆", "+994"],
        ["阿森松(英)", "+247"],
        ["埃及", "+20"],
        ["埃塞俄比亚", "+251"],
        ["爱尔兰", "+353"],
        ["爱沙尼亚", "+372"],
        ["安道尔", "+376"],
        ["安哥拉", "+244"],
        ["安圭拉岛(英)", "+1264"],
        ["安提瓜和巴布达", "+1268"],
        ["奥地利", "+43"],
        ["澳大利亚", "+61"],
        ["澳门", "+853"],
    ],
    'B': [
        ["巴巴多斯", "+1246"],
        ["巴布亚新几内亚", "+675"],
        ["巴哈马国", "+1242"],
        ["巴基斯坦", "+92"],
        ["巴拉圭", "+595"],
        ["巴林", "+973"],
        ["巴拿马", "+507"],
        ["巴西", "+55"],
        ["白俄罗斯", "+375"],
        ["百慕大群岛(英)", "+1441"],
        ["保加利亚", "+359"],
        ["贝宁", "+229"],
        ["比利时", "+32"],
        ["冰岛", "+354"],
        ["波多黎各(美)", "+1"],
        ["波兰", "+48"],
        ["波斯尼亚和黑塞哥维那", "+387"],
        ["玻利维亚", "+591"],
        ["伯利兹", "+501"],
        ["博茨瓦纳", "+267"],
        ["不丹", "+975"],
        ["布基纳法索", "+226"],
        ["布隆迪", "+257"],
    ],
    'C': [
        ["朝鲜", "+850"],
        ["赤道几内亚", "+240"],
    ],
    'D': [
        ["丹麦", "+45"],
        ["德国", "+49"],
        ["东萨摩亚(美)", "+1684"],
        ["多哥", "+228"],
        ["多米尼加共和国", "+1809"],
        ["多米尼克国", "+1767"],
    ],
    'E': [
        ["俄罗斯", "+7"],
        ["厄瓜多尔", "+593"],
        ["厄立特里亚", "+291"],
    ],
    'F': [
        ["法国", "+33"],
        ["法罗群岛(丹)", "+298"],
        ["法属波里尼西亚", "+689"],
        ["梵蒂冈", "+14397"],
        ["菲律宾", "+63"],
        ["斐济", "+679"],
        ["芬兰", "+358"],
        ["佛得角", "+238"],
        ["福克兰群岛", "+500"],
    ],
    'G': [
        ["冈比亚", "+220"],
        ["刚果", "+242"],
        ["哥伦比亚", "+57"],
        ["哥斯达黎加", "+506"],
        ["格林纳达", "+1473"],
        ["格陵兰岛", "+299"],
        ["格鲁吉亚", "+995"],
        ["古巴", "+53"],
        ["瓜德罗普岛(法)", "+590"],
        ["关岛(美)", "+1671"],
        ["圭亚那", "+592"],
    ],
    'H': [
        ["哈萨克斯坦", "+7"],
        ["海地", "+509"],
        ["韩国", "+82"],
        ["荷兰", "+31"],
        ["荷属安的列斯群岛", "+599"],
        ["洪都拉斯", "+504"],
        ["基里巴斯", "+686"],
    ],
    'J': [
        ["吉布提", "+253"],
        ["吉尔吉斯斯坦", "+996"],
        ["几内亚", "+224"],
        ["几内亚比绍", "+245"],
        ["加拿大", "+1"],
        ["加纳", "+233"],
        ["加蓬", "+241"],
        ["柬埔塞", "+855"],
        ["捷克", "+420"],
        ["津巴布韦", "+263"],
    ],
    'K': [
        ["喀麦隆", "+237"],
        ["卡塔尔", "+974"],
        ["开曼群岛(英)", "+1345"],
        ["科科斯岛", "+61"],
        ["科克群岛(新)", "+682"],
        ["科摩罗", "+269"],
        ["科特迪瓦", "+225"],
        ["科威特", "+965"],
        ["克罗地亚", "+385"],
        ["肯尼亚", "+254"],
    ],
    'L': [
        ["拉脱维亚", "+371"],
        ["莱索托", "+266"],
        ["老挝", "+856"],
        ["黎巴嫩", "+961"],
        ["立陶宛", "+370"],
        ["利比里亚", "+231"],
        ["利比亚", "+218"],
        ["列支敦士登", "+423"],
        ["留尼汪岛", "+262"],
        ["卢森堡", "+352"],
        ["卢旺达", "+250"],
        ["罗马尼亚", "+40"],
    ],
    'M': [
        ["马达加斯加", "+261"],
        ["马尔代夫", "+960"],
        ["马耳他", "+356"],
        ["马拉维", "+265"],
        ["马来西亚", "+60"],
        ["马里", "+223"],
        ["马里亚纳群岛", "+1670"],
        ["马其顿", "+389"],
        ["马绍尔群岛", "+692"],
        ["马提尼克(法)", "+596"],
        ["马约特岛", "+262"],
        ["毛里求斯", "+230"],
        ["毛里塔尼亚", "+222"],
        ["美国", "+1"],
        ["蒙古", "+976"],
        ["蒙特塞拉特岛(英)", "+1664"],
        ["孟加拉国", "+880"],
        ["秘鲁", "+51"],
        ["密克罗尼西亚(美)", "+691"],
        ["缅甸", "+95"],
        ["摩尔多瓦", "+373"],
        ["摩洛哥", "+212"],
        ["摩纳哥", "+377"],
        ["莫桑比克", "+258"],
        ["墨西哥", "+52"],
    ],
    'N': [
        ["纳米比亚", "+264"],
        ["南非", "+27"],
        ["南斯拉夫", "+381"],
        ["瑙鲁", "+674"],
        ["尼泊尔", "+977"],
        ["尼加拉瓜", "+505"],
        ["尼日尔", "+227"],
        ["尼日利亚", "+234"],
        ["纽埃岛(新)", "+683"],
        ["挪威", "+47"],
        ["诺福克岛(澳)", "+672"],
    ],
    'P': [
        ["帕劳(美)", "+680"],
        ["葡萄牙", "+351"],
    ],
    'R': [
        ["日本", "+81"],
        ["瑞典", "+46"],
        ["瑞士", "+41"],
    ],
    'S': [
        ["萨尔瓦多", "+503"],
        ["塞拉利昂", "+232"],
        ["塞内加尔", "+221"],
        ["塞浦路斯", "+357"],
        ["塞舌尔", "+248"],
        ["桑给巴尔", "+259"],
        ["沙特阿拉伯", "+966"],
        ["圣诞岛", "+61"],
        ["圣多美和普林西比", "+239"],
        ["圣赫勒拿", "+290"],
        ["圣克里斯托弗和尼维斯", "+1869"],
        ["圣卢西亚", "+1758"],
        ["圣马力诺", "+378"],
        ["圣皮埃尔岛及密克隆岛", "+508"],
        ["圣文森特岛(英)", "+1784"],
        ["斯里兰卡", "+94"],
        ["斯洛伐克", "+421"],
        ["斯洛文尼亚", "+386"],
        ["斯威士兰", "+268"],
        ["苏丹", "+249"],
        ["苏里南", "+597"],
        ["所罗门群岛", "+677"],
        ["索马里", "+252"],
    ],
    'T': [
        ["塔吉克斯坦", "+992"],
        ["台湾", "+886"],
        ["泰国", "+66"],
        ["坦桑尼亚", "+255"],
        ["汤加", "+676"],
        ["特克斯和凯科斯群岛(英)", "+1649"],
        ["特立尼达和多巴哥", "+1868"],
        ["突尼斯", "+216"],
        ["图瓦卢", "+688"],
        ["土耳其", "+90"],
        ["土库曼斯坦", "+993"],
    ],
    'W': [
        ["瓦努阿图", "+678"],
        ["危地马拉", "+502"],
        ["维尔京群岛(英)", "+1340"],
        ["委内瑞拉", "+58"],
        ["乌干达", "+256"],
        ["乌克兰", "+380"],
        ["乌拉圭", "+598"],
        ["乌兹别克斯坦", "+998"],
    ],
    'X': [
        ["西班牙", "+34"],
        ["西萨摩亚", "+685"],
        ["希腊", "+30"],
        ["香港", "+852"],
        ["新加坡", "+65"],
        ["新喀里多尼亚群岛(法)", "+687"],
        ["新西兰", "+64"],
        ["匈牙利", "+36"],
        ["叙利亚", "+963"],
    ],
    'Y': [
        ["牙买加", "+1876"],
        ["亚美尼亚", "+374"],
        ["也门", "+967"],
        ["伊拉克", "+964"],
        ["伊郎", "+98"],
        ["以色列", "+972"],
        ["意大利", "+39"],
        ["印度", "+91"],
        ["印度尼西亚", "+62"],
        ["英国", "+44"],
        ["约旦", "+962"],
        ["越南", "+84"],
    ],
    'Z': [
        ["赞比亚", "+260"],
        ["乍得", "+235"],
        ["直布罗陀(英)", "+350"],
        ["智利", "+56"],
        ["中非", "+236"],
        ["中国大陆", "+86"],
    ],
}

3.引入数据

import { country } from "../../util/phonePrefix";

4.实例

 return {
      indexList: [],
      dataList: {},
    };

5.开始了,其实很简单,就是逻辑问题

  created() {
    this.indexList = Object.keys(country); //获取到key数组,用作侧边索引
    console.log(Object.keys(country))// ["hot", "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "W", "X", "Y", "Z"]
    this.dataList = country;                //数据
  },

6.遍历

   //这个功能官方已经写好,我们把刚才获取的侧边索引数组填入就自动生成侧边索引了
        
// 根据上面的数据得知,我们用脚指头都知道循环两次,我们循环一次,得到的就是数组内对应的key数据了 {{ index }} //因为我们的数据key不是数字,而是我们的索引,所以直接写index,自然就显示成标题了
{{ test[0] }} //这里就不用循环了,直接填 {{ test[1] }}

总结:

本来没想写成博客,首先这个功能大家一看感觉很高大上,自己不好实现,再加上网上很多代码给的方法不对,导致会走弯路,我都是没事逛框架网站,基本都知道哪个网站有什么功能,我只是码农,以实现功能为主

回归正题:有个群友说如果key是动态的,数据也是动态,怎么办. 目前已经解决,我们通过获取数据的key组成索引, 这样保证key是动态的,循环数据这边小白可以一步一步来,先打印出来看看,从外循环到内, 首先我们得到的是一整个数据,循环第一次得到每块数据,每块数据的index就是标题a,b,c,d那些,我们再循环item,得到每小块数据, 我说的还算明白把?

你可能感兴趣的:(手把手Vue移动端使用vant完成索引栏功能)