做移动端的都知道 经常会有省市区这种三级联动的功能 今天研究了一下午~

1.准备工作 vue+mintui+省市区的json数据

下载地址:https://github.com/chzm/address_popup

下载好后需要3个json文件 进入dist找到这3个文件

将这3个文件放入到vue项目里

新建一个处理这3个json方法的文件

  1. import provinces from '../../static/provinces.json'
  2. import areas from '../../static/areas.json'
  3. import cities from '../../static/cities.json'
  4.  
  5. export const zmGetProvinces = () => {
  6. return provinces;
  7. }
  8.  
  9. export const zmGetcities = (provinceCode) => {
  10. if (!provinceCode) {
  11. provinceCode = '11'
  12. }
  13. let citiesArr = [];
  14. cities.forEach(function (item) {
  15. if (item.provinceCode == provinceCode) {
  16. console.log(item)
  17. citiesArr.push(item)
  18. }
  19. })
  20. return citiesArr
  21. }
  22.  
  23. export const zmGetareas = (cityCode) => {
  24. // console.log(areas)
  25. if (!cityCode) {
  26. cityCode = '1101'
  27. }
  28. let areasArr = [];
  29. areas.forEach(function (item) {
  30. if (item.cityCode == cityCode) {
  31. areasArr.push(item)
  32. }
  33. })
  34. return areasArr
  35. }

在这文件处理下数据依次导出

接着可以将省市区做成一个组件方便后续使用 这里我使用的是mintui里的popup和picker这2个组件来搭配

  1. <template>
  2. <div>
  3. <mt-popup class="pop" v-model="sexpopup" position="bottom">
  4. <mt-picker :slots="slots" valueKey="name" @change="onValuesChange"></mt-picker>
  5. </mt-popup>
  6. </div>
  7. </template>
  8.  
  9. <script>
  10. import { zmGetProvinces, zmGetcities, zmGetareas } from "@/utils/zmRegion.js";
  11. export default {
  12. props: ["result"],
  13. data() {
  14. return {
  15. slots: [
  16. {
  17. flex: 1,
  18. values: zmGetProvinces(),
  19. className: "slot1",
  20. textAlign: "right"
  21. },
  22. {
  23. divider: true,
  24. content: "",
  25. className: "slot2"
  26. },
  27. {
  28. flex: 1,
  29. values: zmGetcities("11"),
  30. className: "slot1",
  31. textAlign: "conter"
  32. },
  33. {
  34. divider: true,
  35. content: "",
  36. className: "slot2"
  37. },
  38. {
  39. flex: 1,
  40. values: zmGetareas("1101"),
  41. className: "slot3",
  42. textAlign: "center"
  43. }
  44. ],
  45. region: "",
  46. regionInit: false,
  47. sexpopup: this.result
  48. };
  49. },
  50. watch: {
  51. result(val) {
  52. this.sexpopup = val;
  53. },
  54. sexpopup(val) {
  55. this.$emit("changepop", val);
  56. }
  57. },
  58. methods: {
  59. onValuesChange(picker, values) {
  60. if (this.regionInit) {
  61. if (values[0] && values[1] && values[2]) {
  62. this.region =
  63. values[0]["name"] + values[1]["name"] + values[2]["name"];
  64. console.log(this.region);
  65.  
  66. //给市、县赋值
  67. let area = "";
  68. if (values[0].name == "北京市") {
  69. area = "1101";
  70. } else if (values[0].name == "天津市") {
  71. area = "1201";
  72. } else {
  73. area = values[1]["code"];
  74. }
  75. picker.setSlotValues(1, zmGetcities(values[0]["code"]));
  76. picker.setSlotValues(2, zmGetareas(area));
  77.  
  78. // this.$emit("getRegion", this.region);
  79. } else {
  80. console.log("数据不全");
  81. }
  82. } else {
  83. this.regionInit = true;
  84. }
  85. console.log(this.regionInit);
  86. }
  87. },
  88.  
  89. created() {}
  90. };
  91. </script>
  92.  
  93. <style scoped>
  94. .pop {
  95. width: 100%;
  96. }
  97. </style>

这里有个坑就是天津和北京市这2个地方滑动的时候数据不会重新刷新 在这里做了个处理

最后将组件导入需要用到的地方

这里用到了props组件见的双向绑定 自行百度~~

使用一个点击事件改变sexpopup的状态

最后附上效果图 大功告成 记录下!~~~~~

使用vue+mintui 开发省市区功能的更多相关文章

  1. vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)

    demo及源码地址 https://github.com/artiely/citypicker 先去下载一个“省份.城市.区县.乡镇” 四级联动数据,然后 引入 import { Picker } f ...

  2. 基于 Vue+Mint-ui 的 Mobile-h5 的项目说明

    Vue作为前端三大框架之一,其已经悄然成为主流,学会用vue相关技术来开发项目会相当轻松. 对于还没学习或者还没用过vue的初学者,基础知识这里不作详解,推荐先去相关官网,学习一下vue相关的基础知识 ...

  3. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...

  4. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  5. 前端工程化(三)---Vue的开发模式

    从0开始,构建前后端分离应用 导航 前端工程化(一)---工程基础目录搭建 前端工程化(二)---webpack配置 前端工程化(三)---Vue的开发模式 前端工程化(四)---helloWord ...

  6. Vue+koa2开发一款全栈小程序(1.课程介绍+2.ES6入门)

    1.课程介绍 1.课程概述 1.做什么? Vue+koa2开发一款全栈小程序 2.哪些功能? 个人中心.图书列表.图书详情.图书评论.个人评论列表 3.技术栈 小程序.Vue.js.koa2.koa- ...

  7. electron-vue:Vue.js 开发 Electron 桌面应用

    相信很多同学都知道 Electron 可以帮助开发人员使用前端技术开发桌面客户端应用,今天介绍的 electron-vue 框架是一套基于 Vue.js 开发 Electron 桌面应用的脚手架,该项 ...

  8. vue前端开发那些事——vue组件开发

    vue的学习曲线不是很陡(相比其它框架,如anglarjs),官方文档比较全面,分为基础篇和高级篇.我们刚开始学习的时候,肯定像引用jquery那样,先把vue的js引进来,然后学习基础内容.如果仅仅 ...

  9. 示例vue 的keep-alive缓存功能的实现

    本篇文章主要介绍了vue 的keep-alive缓存功能的实现,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. Vue 实现组件信息的缓存 当我们 ...

随机推荐

  1. Oracle数据库 常用的触发器命令

    创建自增序列,创建触发器(在触发时间中操纵序列,实现主键自增): Oracle数据库不支持自增方法 create sequence seq_userInfo_usid start with ;--创建 ...

  2. [Linux学习--用户管理]centos中添加一个新用户,并授权

    前言 有时候给root用户不太方便,新建一个用于并赋予权限这个做法相对好些 创建新用户 创建一个用户名为:cmj [root@localhost ~]# adduser cmj 为这个用户初始化密码, ...

  3. Python基础知识(八)----文件操作

    文件操作 一丶文件操作初识 ###f=open('文件名','模式',编码): #open() # 调用操作系统打开文件 #mode #对文件的操作方式 #encoding # 文件的编码格式 存储编 ...

  4. python中configparser模块读取ini文件

    python中configparser模块读取ini文件 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(se ...

  5. 巧用浏览器F12调试器定位系统前后端bug-转载

    做测试的小伙伴可能用过httpwatch,firebug,fiddler,charles等抓包(数据包)工具,但实际上除了这些还有一个简单实用并的抓包工具,那就是浏览器的F12调试器. httpwat ...

  6. 得到List<HashTable>里面的list然后取list的某一项

    //得到List<HashTable>里面的listUnFix然后取listUnFix判断tempfix里面得值 List<Hashtable> list = new List ...

  7. golang之reflection

    反射就是程序能够在运行时检查变量和值,求出它们的类型. reflect包实现运行时反射. 创建一个接收任何数据类型任何数值的查询string: func createQuery(q interface ...

  8. Linux操作系统之更改启动菜单的背景图实战案例

    Linux操作系统之更改启动菜单的背景图实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.制作图像并上传到服务器 1>.使用window 10操作系统自带的画图工具 ...

  9. 编译heartbeat出现的问题

    如报 cc1: warnings being treated as errors pils.c:245: error: initialization fromincompatible pointer ...

  10. 【Miscalculation UVALive - 6833 】【模拟】

    题目分析 题目讲的是给你一个串,里面是加法.乘法混合运算(个人赛中误看成是加减乘除混合运算),有两种算法,一种是乘法优先运算,另一种是依次从左向右运算(不管它是否乘在前还是加在前). 个人赛中试着模拟 ...