手把手Vue移動(dòng)端使用vant完成索引欄功能

背景

寫選擇手機(jī)號(hào)碼前綴功能,需要使用索引欄,遂到框架內(nèi)找到,并在網(wǎng)上找到數(shù)據(jù)


image.png

image.png

開始

1.安裝vant:https://vant-contrib.gitee.io/vant/#/zh-CN/index-bar
vant 上有寫好的框架,能省很多力氣,我一向是有框架絕對(duì)不自己寫輪子

2.數(shù)據(jù)

export let country = {
    'hot': [
        ["中國(guó)大陸", "+86"],
        ["香港", "+852"],
        ["澳門", "+853"],
        ["臺(tái)灣", "+886"],
        ["美國(guó)", "+1"],
        ["日本", "+81"],
    ],
    "A": [
        ["阿爾巴尼亞", "+355"],
        ["阿爾及利亞", "+213"],
        ["阿富汗", "+93"],
        ["阿根廷", "+54"],
        ["阿魯巴島", "+297"],
        ["阿曼", "+968"],
        ["阿塞拜疆", "+994"],
        ["阿森松(英)", "+247"],
        ["埃及", "+20"],
        ["埃塞俄比亞", "+251"],
        ["愛爾蘭", "+353"],
        ["愛沙尼亞", "+372"],
        ["安道爾", "+376"],
        ["安哥拉", "+244"],
        ["安圭拉島(英)", "+1264"],
        ["安提瓜和巴布達(dá)", "+1268"],
        ["奧地利", "+43"],
        ["澳大利亞", "+61"],
        ["澳門", "+853"],
    ],
    'B': [
        ["巴巴多斯", "+1246"],
        ["巴布亞新幾內(nèi)亞", "+675"],
        ["巴哈馬國(guó)", "+1242"],
        ["巴基斯坦", "+92"],
        ["巴拉圭", "+595"],
        ["巴林", "+973"],
        ["巴拿馬", "+507"],
        ["巴西", "+55"],
        ["白俄羅斯", "+375"],
        ["百慕大群島(英)", "+1441"],
        ["保加利亞", "+359"],
        ["貝寧", "+229"],
        ["比利時(shí)", "+32"],
        ["冰島", "+354"],
        ["波多黎各(美)", "+1"],
        ["波蘭", "+48"],
        ["波斯尼亞和黑塞哥維那", "+387"],
        ["玻利維亞", "+591"],
        ["伯利茲", "+501"],
        ["博茨瓦納", "+267"],
        ["不丹", "+975"],
        ["布基納法索", "+226"],
        ["布隆迪", "+257"],
    ],
    'C': [
        ["朝鮮", "+850"],
        ["赤道幾內(nèi)亞", "+240"],
    ],
    'D': [
        ["丹麥", "+45"],
        ["德國(guó)", "+49"],
        ["東薩摩亞(美)", "+1684"],
        ["多哥", "+228"],
        ["多米尼加共和國(guó)", "+1809"],
        ["多米尼克國(guó)", "+1767"],
    ],
    'E': [
        ["俄羅斯", "+7"],
        ["厄瓜多爾", "+593"],
        ["厄立特里亞", "+291"],
    ],
    'F': [
        ["法國(guó)", "+33"],
        ["法羅群島(丹)", "+298"],
        ["法屬波里尼西亞", "+689"],
        ["梵蒂岡", "+14397"],
        ["菲律賓", "+63"],
        ["斐濟(jì)", "+679"],
        ["芬蘭", "+358"],
        ["佛得角", "+238"],
        ["赴萋恚克蘭群島", "+500"],
    ],
    'G': [
        ["岡比亞", "+220"],
        ["剛果", "+242"],
        ["哥倫比亞", "+57"],
        ["哥斯達(dá)黎加", "+506"],
        ["格林納達(dá)", "+1473"],
        ["格陵蘭島", "+299"],
        ["格魯吉亞", "+995"],
        ["古巴", "+53"],
        ["瓜德羅普島(法)", "+590"],
        ["關(guān)島(美)", "+1671"],
        ["圭亞那", "+592"],
    ],
    'H': [
        ["哈薩克斯坦", "+7"],
        ["海地", "+509"],
        ["韓國(guó)", "+82"],
        ["荷蘭", "+31"],
        ["荷屬安的列斯群島", "+599"],
        ["洪都拉斯", "+504"],
        ["基里巴斯", "+686"],
    ],
    'J': [
        ["吉布提", "+253"],
        ["吉爾吉斯斯坦", "+996"],
        ["幾內(nèi)亞", "+224"],
        ["幾內(nèi)亞比紹", "+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"],
        ["盧旺達(dá)", "+250"],
        ["羅馬尼亞", "+40"],
    ],
    'M': [
        ["馬達(dá)加斯加", "+261"],
        ["馬爾代夫", "+960"],
        ["馬耳他", "+356"],
        ["馬拉維", "+265"],
        ["馬來西亞", "+60"],
        ["馬里", "+223"],
        ["馬里亞納群島", "+1670"],
        ["馬其頓", "+389"],
        ["馬紹爾群島", "+692"],
        ["馬提尼克(法)", "+596"],
        ["馬約特島", "+262"],
        ["毛里求斯", "+230"],
        ["毛里塔尼亞", "+222"],
        ["美國(guó)", "+1"],
        ["蒙古", "+976"],
        ["蒙特塞拉特島(英)", "+1664"],
        ["孟加拉國(guó)", "+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"],
        ["塞內(nèi)加爾", "+221"],
        ["塞浦路斯", "+357"],
        ["塞舌爾", "+248"],
        ["桑給巴爾", "+259"],
        ["沙特阿拉伯", "+966"],
        ["圣誕島", "+61"],
        ["圣多美和普林西比", "+239"],
        ["圣赫勒拿", "+290"],
        ["圣克里斯托弗和尼維斯", "+1869"],
        ["圣盧西亞", "+1758"],
        ["圣馬力諾", "+378"],
        ["圣皮埃爾島及密克隆島", "+508"],
        ["圣文森特島(英)", "+1784"],
        ["斯里蘭卡", "+94"],
        ["斯洛伐克", "+421"],
        ["斯洛文尼亞", "+386"],
        ["斯威士蘭", "+268"],
        ["蘇丹", "+249"],
        ["蘇里南", "+597"],
        ["所羅門群島", "+677"],
        ["索馬里", "+252"],
    ],
    'T': [
        ["塔吉克斯坦", "+992"],
        ["臺(tái)灣", "+886"],
        ["泰國(guó)", "+66"],
        ["坦桑尼亞", "+255"],
        ["湯加", "+676"],
        ["特克斯和凱科斯群島(英)", "+1649"],
        ["特立尼達(dá)和多巴哥", "+1868"],
        ["突尼斯", "+216"],
        ["圖瓦盧", "+688"],
        ["土耳其", "+90"],
        ["土庫(kù)曼斯坦", "+993"],
    ],
    'W': [
        ["瓦努阿圖", "+678"],
        ["危地馬拉", "+502"],
        ["維爾京群島(英)", "+1340"],
        ["委內(nèi)瑞拉", "+58"],
        ["烏干達(dá)", "+256"],
        ["烏克蘭", "+380"],
        ["烏拉圭", "+598"],
        ["烏茲別克斯坦", "+998"],
    ],
    'X': [
        ["西班牙", "+34"],
        ["西薩摩亞", "+685"],
        ["希臘", "+30"],
        ["香港", "+852"],
        ["新加坡", "+65"],
        ["新喀里多尼亞群島(法)", "+687"],
        ["新西蘭", "+64"],
        ["匈牙利", "+36"],
        ["敘利亞", "+963"],
    ],
    'Y': [
        ["牙買加", "+1876"],
        ["亞美尼亞", "+374"],
        ["也門", "+967"],
        ["伊拉克", "+964"],
        ["伊郎", "+98"],
        ["以色列", "+972"],
        ["意大利", "+39"],
        ["印度", "+91"],
        ["印度尼西亞", "+62"],
        ["英國(guó)", "+44"],
        ["約旦", "+962"],
        ["越南", "+84"],
    ],
    'Z': [
        ["贊比亞", "+260"],
        ["乍得", "+235"],
        ["直布羅陀(英)", "+350"],
        ["智利", "+56"],
        ["中非", "+236"],
        ["中國(guó)大陸", "+86"],
    ],
}

3.引入數(shù)據(jù)

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

4.實(shí)例

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

5.開始了,其實(shí)很簡(jiǎn)單,就是邏輯問題

  created() {
    this.indexList = Object.keys(country); //獲取到key數(shù)組,用作側(cè)邊索引
    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;                //數(shù)據(jù)
  },

6.遍歷

<van-index-bar :index-list="indexList" sticky>   //這個(gè)功能官方已經(jīng)寫好,我們把剛才獲取的側(cè)邊索引數(shù)組填入就自動(dòng)生成側(cè)邊索引了
        <div v-for="(item, index) in dataList" :key="index">  // 根據(jù)上面的數(shù)據(jù)得知,我們用腳指頭都知道循環(huán)兩次,我們循環(huán)一次,得到的就是數(shù)組內(nèi)對(duì)應(yīng)的key數(shù)據(jù)了
          <van-index-anchor :index="index">  
            {{ index }}   //因?yàn)槲覀兊臄?shù)據(jù)key不是數(shù)字,而是我們的索引,所以直接寫index,自然就顯示成標(biāo)題了
          </van-index-anchor>
          <div
            v-for="(test, inde) in item"    //循環(huán)第二次,把對(duì)應(yīng)的key進(jìn)行循環(huán),得到key里面的每個(gè)小數(shù)據(jù),別猶豫按著寫就完事了,
            :key="inde"
            class="cell"
            :data-num="test[1]"
            @click="getPhoneNum($event)"
          >
            <span>{{ test[0] }}</span>    //這里就不用循環(huán)了,直接填
            <span>{{ test[1] }}</span>
          </div>
        </div>
 </van-index-bar>

總結(jié):

本來沒想寫成博客,首先這個(gè)功能大家一看感覺很高大上,自己不好實(shí)現(xiàn),再加上網(wǎng)上很多代碼給的方法不對(duì),導(dǎo)致會(huì)走彎路,我都是沒事逛框架網(wǎng)站,基本都知道哪個(gè)網(wǎng)站有什么功能,我只是碼農(nóng),以實(shí)現(xiàn)功能為主

回歸正題:有個(gè)群友說如果key是動(dòng)態(tài)的,數(shù)據(jù)也是動(dòng)態(tài),怎么辦. 目前已經(jīng)解決,我們通過獲取數(shù)據(jù)的key組成索引, 這樣保證key是動(dòng)態(tài)的,循環(huán)數(shù)據(jù)這邊小白可以一步一步來,先打印出來看看,從外循環(huán)到內(nèi), 首先我們得到的是一整個(gè)數(shù)據(jù),循環(huán)第一次得到每塊數(shù)據(jù),每塊數(shù)據(jù)的index就是標(biāo)題a,b,c,d那些,我們?cè)傺h(huán)item,得到每小塊數(shù)據(jù), 我說的還算明白把?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市俩莽,隨后出現(xiàn)的幾起案子旺坠,更是在濱河造成了極大的恐慌,老刑警劉巖扮超,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件取刃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡出刷,警方通過查閱死者的電腦和手機(jī)璧疗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來巷蚪,“玉大人病毡,你說我怎么就攤上這事∑ò兀” “怎么了啦膜?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淌喻。 經(jīng)常有香客問我僧家,道長(zhǎng),這世上最難降的妖魔是什么裸删? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任八拱,我火速辦了婚禮,結(jié)果婚禮上涯塔,老公的妹妹穿的比我還像新娘肌稻。我一直安慰自己,他們只是感情好匕荸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布爹谭。 她就那樣靜靜地躺著,像睡著了一般榛搔。 火紅的嫁衣襯著肌膚如雪诺凡。 梳的紋絲不亂的頭發(fā)上东揣,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音腹泌,去河邊找鬼嘶卧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凉袱,可吹牛的內(nèi)容都是我干的芥吟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼专甩,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼运沦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起配深,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嫁盲,沒想到半個(gè)月后篓叶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡羞秤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年缸托,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘾蛋。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俐镐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哺哼,到底是詐尸還是另有隱情佩抹,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布取董,位于F島的核電站棍苹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茵汰。R本人自食惡果不足惜枢里,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹂午。 院中可真熱鬧栏豺,春花似錦、人聲如沸豆胸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)配乱。三九已至溉卓,卻和暖如春皮迟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桑寨。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工伏尼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尉尾。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓爆阶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沙咏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辨图,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容