vant: https://youzan.github.io/vant/#/zh-CN/

安装

cnpm i -S vant

按需加载配置

# 在 babel.config.js 中配置


module.exports = {
  plugins: [
    ['import', {
      libraryName: 'vant',
      libraryDirectory: 'es',
      style: true
    }, 'vant']
  ],
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}

对于获取到的城市数据进行处理创建个api.js文件


 // 引入封装头信息和请求域名的axios对象
import http from './http'
 // 引入请求的url地址
import{
cityUri
} from '../config/uri'
export const cityData = async () => {
// 判断本地是否有缓存,如果有则不请求远程数据
let cacheData = !localStorage.getItem('cityData') ? [] : JSON.parse(localStorage.getItem('cityData'))
if(cacheData.length > 0){
return Promise.resolve(cacheData)
}
let ret = await http.get(cityUrl,{
headers:{
// 由于请求头信息中不同的需求不同的请求头,所以要判断所用的条件
'info':'city'
}
})
let retData = ret.data.cities
// 城市字母索引
let cityIndex = []
// 处理完成后的数据
let dataList = []
let indexList = []
for(let i = 65 ; i <= 90 ; i++){
// 这是String.fromCharCode的示例 可接受一个指定的 Unicode 值,然后返回一个字符串
// document.write(String.fromCharCode(65,66,67) ) 输出 ABC
cityIndex.push(String.fromCharCode(i))
}
cityIndex.forEach(index => {
let tmpArr = retData.filter(item => index.toLowerCase() == item.pinyin.substr(0,1))
if(tmpArr.length > 0){
indexList.push(index)
dataList.push({
index,
data:tmpArr
})
}
})
let data = [dataList,indexList]
localStorage.setItem('cityData',JSON.stringify(data))
return Promise.resolve([dataList,indexList])
}

在组件中使用

<template>
  <div>
    <van-index-bar :index-list="indexList" highlight-color="#ff0000">
      <template v-for="item in datalist">
        <van-index-anchor :index="item.index" :key="item.index" />
        <van-cell v-for="subitem in item.data" :title="subitem.name" />
      </template>
    </van-index-bar>
  </div>
</template>
<script>
import Vue from 'vue'
import { IndexBar, IndexAnchor, Cell } from 'vant'
import { cityData } from '../../api/api'
Vue.use(IndexBar)
Vue.use(IndexAnchor)
Vue.use(Cell)
export default {
  data() {
    return {
      dataList: [],
      indexList: ['A', 'B']
    }
  },
  mounted() {
    this.getData()
  },
  methods: {
    async getData() {
      const ret = await cityData()
      this.datalist = ret[0]
      this.indexList = ret[1]
    }
  }
}
</script>
<style></style>

vant做城市列表的更多相关文章

  1. 获取中央气象台API 完整城市列表简单方式

    activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android& ...

  2. 微信小程序实现按首字母检索城市列表

    不说废话,上效果图 因为我有多处要用到,所以我这里是写成自定义组件的,你也可以直接改成在page页面编写: 布局左边一个scroll-view,显示城市列表,右边一个view显示字母列表,城市列表这边 ...

  3. vue实现城市列表选择

    成果展示 最后的成果就是下面所展示的内容,因为gif图没有做,只能截图所展示,接下来,会带着大家一步一步的完成下面功能,脚手架搭建和node安装在本次案例不会讲解,如果了解,可以在我的博客园找到有详细 ...

  4. Android 快速索引(城市列表和联系人)

    最近需要实现一个城市列表的快速索引功能.类似于联系人应用,根据姓名首字母快速索引功能. 要实现这个功能只需要解决两个问题:1.对列表进行分组(具有同一特征),并且能够快速定位到该组的第一项 2.右侧分 ...

  5. Android例子源码非第三方实现根据字母排序的城市列表

    values 下dimens.xml <resources> <!-- Default screen margins, per the Android Design guidelin ...

  6. QML学习笔记(五)— 做一个简单的待做事项列表

    做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...

  7. vue-cli 3.0 实现A-Z字母滑动选择城市列表

    项目地址: https://github.com/caochangkui/vue-cli3 项目代码: 城市列表首页: City.vue <template> <div id=&qu ...

  8. vue 城市列表与字母表联动

    实现两个联动 一是点击右侧字母的时候,城市列表出现相应首字母下的城市 二是鼠标在字母表上滑动的时候,城市列表实时跟着变化 一.点击字母出现相应的列表,给每个字母设置handleLetterClick事 ...

  9. Android 国际区号注册手机号编码 以及常用城市列表

    附上 国际区号编码:我是定义到arrays.xml里面了 <?xml version="1.0" encoding="utf-8"?> <re ...

  10. [RN] 全国城市列表选择 (包含定位城市、热门城市、全国城市)

    全国城市列表选择 (包含定位城市.热门城市.全国城市) 用ScrollView 实现,解决 SectionList 实现的卡顿问题 实现效果如图: 代码实现如图: 主逻辑文件 cityList.js ...

随机推荐

  1. 力扣476(java)-数字的补数(简单)

    题目: 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数. 例如,整数 5 的二进制表示是 "101" ,取反后得到 "0 ...

  2. 力扣357(java)-统计各位数字都不同的数字个数(中等)

    题目: 给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n . 示例 1: 输入:n = 2输出:91解释:答案应为除去 11.22.33.44 ...

  3. 《最新出炉》系列入门篇-Python+Playwright自动化测试-40-录制生成脚本

    1.简介 各种自动化框架都会有脚本录制功能, playwright这么牛叉当然也不例外.很早之前的selenium.Jmeter工具,发展到每种浏览器都有对应的录制插件.今天我们就来看下微软自动化框架 ...

  4. Koordinator 0.6:企业级容器调度系统解决方案,引入 CPU 精细编排、资源预留与全新的重调度框架

    简介: 经过社区多位成员的贡献,Koordinator 0.6 版本正式发布.相较于上一个版本 0.5,新版本进一步完善了 CPU 精细化编排能力,更好的兼容原生用法:支持了资源预留的能力(Reser ...

  5. [PHP] 浅谈 Laravel Authorization 的 gates 与 policies

    首先要区分 Authentication 与 Authorization,认证和授权,粗细有别. 授权(Authorization) 有两种主要方式,Gates 和 Policies. Gates 和 ...

  6. dotnet 6 修复找不到 EnumeratorToEnumVariantMarshaler 问题

    我将在一个 .NET Framework 项目升级到 dotnet 6 时发现构建不通过,因为原先的代码使用到了 EnumeratorToEnumVariantMarshaler 类型,在 dotne ...

  7. 2024 CKA考试

    一.考试形式 第一次考试可能有点紧张,训练时1小时不到搞定,考试用了1个半小时,记得考试前多练几次题目,就算紧张也可以在120分钟里考完,可以记住关键词去kubernetes.io中查找 考试模式:线 ...

  8. STM32 USART串口通信

    一.介绍 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用分数波特率发生器提供宽范围的波特率选择.它支持同步单向 ...

  9. 笔记06-第六讲 Cadence同一页面建立电气互连

    笔记06-第六讲 Cadence同一页面建立电气互连 内容: 90度和任意角度连线; 连线方式; 十字线添加/删除连接点; Net alias; 无连接的管脚处理; 注意事项. 连线有两种方式,右侧工 ...

  10. 2021年5.21NCU第四届校赛

    比赛地址:http://222.204.50.106/contest/39 A 树上祖先 链接:http://222.204.50.106/contest/39/problem/A B 莎士比亚 链接 ...