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

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

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

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

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

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

import provinces from '../../static/provinces.json'
import areas from '../../static/areas.json'
import cities from '../../static/cities.json' export const zmGetProvinces = () => {
return provinces;
} export const zmGetcities = (provinceCode) => {
if (!provinceCode) {
provinceCode = '11'
}
let citiesArr = [];
cities.forEach(function (item) {
if (item.provinceCode == provinceCode) {
console.log(item)
citiesArr.push(item)
}
})
return citiesArr
} export const zmGetareas = (cityCode) => {
// console.log(areas)
if (!cityCode) {
cityCode = '1101'
}
let areasArr = [];
areas.forEach(function (item) {
if (item.cityCode == cityCode) {
areasArr.push(item)
}
})
return areasArr
}

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

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

<template>
<div>
<mt-popup class="pop" v-model="sexpopup" position="bottom">
<mt-picker :slots="slots" valueKey="name" @change="onValuesChange"></mt-picker>
</mt-popup>
</div>
</template> <script>
import { zmGetProvinces, zmGetcities, zmGetareas } from "@/utils/zmRegion.js";
export default {
props: ["result"],
data() {
return {
slots: [
{
flex: 1,
values: zmGetProvinces(),
className: "slot1",
textAlign: "right"
},
{
divider: true,
content: "",
className: "slot2"
},
{
flex: 1,
values: zmGetcities("11"),
className: "slot1",
textAlign: "conter"
},
{
divider: true,
content: "",
className: "slot2"
},
{
flex: 1,
values: zmGetareas("1101"),
className: "slot3",
textAlign: "center"
}
],
region: "",
regionInit: false,
sexpopup: this.result
};
},
watch: {
result(val) {
this.sexpopup = val;
},
sexpopup(val) {
this.$emit("changepop", val);
}
},
methods: {
onValuesChange(picker, values) {
if (this.regionInit) {
if (values[0] && values[1] && values[2]) {
this.region =
values[0]["name"] + values[1]["name"] + values[2]["name"];
console.log(this.region); //给市、县赋值
let area = "";
if (values[0].name == "北京市") {
area = "1101";
} else if (values[0].name == "天津市") {
area = "1201";
} else {
area = values[1]["code"];
}
picker.setSlotValues(1, zmGetcities(values[0]["code"]));
picker.setSlotValues(2, zmGetareas(area)); // this.$emit("getRegion", this.region);
} else {
console.log("数据不全");
}
} else {
this.regionInit = true;
}
console.log(this.regionInit);
}
}, created() {}
};
</script> <style scoped>
.pop {
width: 100%;
}
</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. Scala 系列(四)—— 数组 Array

    一.定长数组 在 Scala 中,如果你需要一个长度不变的数组,可以使用 Array.但需要注意以下两点: 在 Scala 中使用 (index) 而不是 [index] 来访问数组中的元素,因为访问 ...

  2. 视频推流模式HLS,HTTP,RTSP,RTMP协议的区别

    HTTP: 先通过服务器将FLV下载到本地缓存,然后再通过NetConnection的本地连接来播放这个FLV,这种方法是播放本地的视频,并不是播放服务器的视频.因此在本地缓存里可以找到这个FLV.其 ...

  3. .NET Core随笔把数据库数据查出来转JSON并输出

    直接创建WEB项目即可: public class Startup { //startup.cs是站点启动时具体做了哪些事情,主要是开启了一个mvc服务. public Startup(IConfig ...

  4. honeyd使用

    honeyd可以同时模仿上千个不同的计算机 官网 honeyd-1.5c.tar.gz:http://www.honeyd.org 依赖包 libevent-1.3a.tar.gz:http://li ...

  5. Celery:Optimizing

    参考文档:http://docs.celeryproject.org/en/latest/userguide/optimizing.html#guide-optimizing

  6. Flink源码分析 - 剖析一个简单的Flink程序

    本篇文章首发于头条号Flink程序是如何执行的?通过源码来剖析一个简单的Flink程序,欢迎关注头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech) ...

  7. Centos7搭建Harbor私有仓库(一)

    1 说明 前文Centos7搭建DockerRegistry介绍了DockerRegistry的搭建,但它没有UI页面,因此选择Harbor 以下基于镜像CentOS-7-x86_64-Minimal ...

  8. Linux操作系统启动故障排错之/boot目录被删除恢复案例

    Linux操作系统启动故障排错之"/boot"目录被删除恢复案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模拟删除/boot分区 1>.查看/b ...

  9. Synchronized偏向锁和轻量级锁的升级

    原文:https://blog.csdn.net/tongdanping/article/details/79647337 锁的优化1.锁升级锁的4中状态:无锁状态.偏向锁状态.轻量级锁状态.重量级锁 ...

  10. jupyter notebook中导入其他ipynb文件中的代码

    %%capture %run "../Untitled Folder 3/2nn.ipynb" %%capture 抑制输出%run "../Untitled Folde ...