vue移动端地区三级联动 省,市,县。用的vue+mintUi 因为多级联动以及地区的规则比较多。正好有时间自己写了一个。有问题以及建议欢迎指出。涉及到dom移动,所以依赖vue+jquery。这边数据是后端请求的。我只简单写了三个mock数据。(二)中简单写一下展示以及父级组件。

city.vue 子组件:

html:

<template>
<div id="city" v-if="showModel">
<div class="bg"></div>
<div class="city">
<div>
<div v-touch:swipeup="methodFunc" v-touch:swipedown="methodFunc" data-index="1">
<p v-for="(item,index) in province" v-if="province.length > 0" :class="{'active':index == 0}">
<span>{{item.value}}</span>
</p>
<p v-if="province.length == 0" class="active"><span>请选择</span></p>
</div>
<span class="line">-</span>
</div> <div>
<div v-touch:swipeup="methodFunc" v-touch:swipedown="methodFunc" data-index="2">
<p :class="{'active':index == 0}" v-for="(item,index) in city"
v-if="city.length > 0">
<span>{{item.value}}</span>
</p>
<p v-if="city.length == 0" class="active"><span>请选择</span></p>
</div>
<span class="line">-</span>
</div> <div>
<div v-touch:swipeup="methodFunc" v-touch:swipedown="methodFunc" data-index="3">
<p v-for="(item,index) in township" :class="{'active':index == 0}"
v-if="township.length > 0">
<span>{{item.value}}</span>
</p>
<p v-if="township.length == 0" class="active"><span>请选择</span></p>
</div>
</div>
</div>
<div class="determine" @click="determine">
<p>确定</p>
</div>
<div class="cencel" @click="cencel">
<p>取消</p>
</div>
</div> </template>

javascript:

<script>
import {Toast} from 'mint-ui';
import Bus from 'router/bus.js';
export default {
props : ['consignmentPlace'],
data(){
return {
showModel : false,
provinceIndex: 0,
cityIndex : 0,
townshipIndex: 0,
province : [
{
value: '省份'
}, {
id : "1",
value: "大连"
},
{
id : "2",
value: "沈阳"
},
{
id : "3",
value: "北京"
}],
city : [
{
value: '城市'
}, {
id : "1",
value: "大连"
},
{
id : "2",
value: "沈阳"
},
{
id : "3",
value: "北京"
}],
township : [
{
value: '区县'
}, {
id : "1",
value: "大连"
},
{
id : "2",
value: "沈阳"
},
{
id : "3",
value: "北京"
}]
}
},
created(){
Bus.$on('getCityData', data => {
this.queryData(data.index)
});
},
methods: {
methodFunc(index, type){
var self = this;
var nowIndex = index == 1 ? self.provinceIndex : index == 2 ? self.cityIndex : self.townshipIndex;
$(".city").children('div').eq(index).find('div').animate({"top": "0rem"});
$(".city").children('div').eq(index).find('div').children('p').removeClass('active');
$(".city").children('div').eq(index).find('div').children('p').eq(0).addClass('active');
if (type == 'swipeup') {
nowIndex += 1;
if ($(".city").children('div').eq(index - 1).find('p').length == nowIndex) {
return false;
}
if (index == 1) {
self.provinceIndex += 1;
self.cityIndex = 0;
self.townshipIndex = 0;
$(".city").children('div').eq(2).find('div').animate({"top": "0rem"});
$(".city").children('div').eq(2).find('div').children('p').eq(0).addClass('active');
} else if (index == 2) {
self.cityIndex += 1;
self.townshipIndex = 0;
} else {
self.townshipIndex += 1;
} $(".city").children('div').eq(index - 1).find('div').animate({"top": "-" + nowIndex * .7 + "rem"}); } else if (type == 'swipedown') { if (nowIndex == 0) {
return false;
}
nowIndex -= 1; $(".city").children('div').eq(index).find('div').animate({"top": "0rem"});
$(".city").children('div').eq(index).find('div').children('p').removeClass('active');
$(".city").children('div').eq(index).find('div').children('p').eq(0).addClass('active'); if (index == 1) {
$(".city").children('div').eq(2).find('div').animate({"top": "0rem"});
$(".city").children('div').eq(2).find('div').children('p').eq(0).addClass('active');
self.provinceIndex -= 1;
self.cityIndex = 0;
self.townshipIndex = 0;
} else if (index == 2) {
self.cityIndex -= 1;
self.townshipIndex = 0;
} else {
self.townshipIndex -= 1;
} $(".city").children('div').eq(index - 1).find('div').animate({"top": "-" + nowIndex * .7 + "rem"});
}
$(".city").children('div').eq(index - 1).find('div').children('p').removeClass('active');
$(".city").children('div').eq(index - 1).find('div').children('p').eq(nowIndex).addClass('active'); var requestIndex = index == 1 ? 2 : index == 2 ? 3 : 3;
if (index == 3) {
return false;
}
this.queryData(requestIndex)
},
queryData(index){ var self = this;
self.showModel = true;
var requestObj = {
id: ''
}
if (index == 2) {
requestObj.id = self.province[self.provinceIndex].id } else if (index == 3) {
requestObj.id = self.province[self.cityIndex].id
} if (index == 1) { self.$store.getters.getProvince.map(v => {
self.province.push(v)
})
self.city = [{
value: '城市'
}]
self.township = [{
value: '区县'
}]
} else if (index == 2) {
self.city = [{
value: '城市'
}]
self.township = [{
value: '区县'
}] if (!requestObj.id) { return false;
} self.$store.getters.getProvince.map(v => {
self.city.push(v)
}) } else if (index == 3) { self.township = [{
value: '区县'
}]
if (!requestObj.id) { return false;
}
self.$store.getters.getProvince.map(v => {
self.township.push(v)
}) } },
cencel(){
var self = this;
self.showModel = false;
self.provinceIndex = 0;
self.cityIndex = 0;
self.townshipIndex = 0;
self.province = [{
value: '省份'
}];
self.city = [{
value: '城市'
}];
self.township = [{
value: '区县'
}]
},
determine(){ var self = this;
var value = '';
var id = '';
var province = self.province[self.provinceIndex].value;
var city = self.city[self.cityIndex].value;
var township = self.township[self.townshipIndex].value;
if (province != '省份' && city != '城市' && township != '区县') {
value = province + '-' + city + '-' + township;
id = self.township[self.townshipIndex].id;
self.consignmentPlace.address = value;
self.consignmentPlace.id = id;
self.cencel();
} else if (province == '省份') {
Toast('您还没有选择省份!')
} else if (city == '城市') {
Toast('您还没有选择城市!')
} else if (township == '区县') {
Toast('您还没有选择区县!')
}
} }
}
</script>

vue移动端地址三级联动组件(一)的更多相关文章

  1. vue移动端地址三级联动组件(二)

    继续上一篇: 子组件css: <style scoped lang="less"> #city { width: 100%; height: 100%; positio ...

  2. vue仿京东省市区三级联动选择组件

    工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...

  3. Vue如何使用vue-area-linkage实现地址三级联动效果

    很多时候我们需要使用地址三级联动,即省市区三级联动.网上有很多插件,在此介绍Vue的一款地区联动插件:vue-area-linkage,下面介绍如何使用这个插件实现地址联动效果:         1. ...

  4. 中国省市区地址三级联动jQuery插件 案例下载

    中国省市区地址三级联动jQuery插件 案例下载 distpicker 是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. 安装 可以通过npm ...

  5. 中国省市区地址三级联动插件---jQuery Distpicker

    插件描述:distpicker是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. [官网]https://fengyuanchen.github ...

  6. 用vue实现省市县三级联动

    我真的没想到这个会困扰到我.最开始以为,不就是直接找个简单的插件就实现了吗,jquery插件找了几个,都没有达到目的. 需求是这样的: 点击input框,弹出一个popup,然后可以滚动选择省,市,县 ...

  7. vue城市三级联动组件 vue-area-linkage

    Install the pkg with npm: // v5之前的版本 npm i --save vue-area-linkage // v5及之后的版本 npm i --save vue-area ...

  8. vue 移动端轻量日期组件不依赖第三方库

    Vue版移动端日期选择组件 1.优点:不需要依赖其他第三方库,灵活可配置: 不需要依赖第三方组件的vue日期移动端组件  小轮子 轻量可复用:  https://github.com/BeckReed ...

  9. jquery_ajax 地址三级联动

    jquery 的三级地址联动,原理与javascript类似,只是在触发请求的时候,使用封装好的 $.get ,$post,$.ajax 方法去执行,其余的都是一样的,后台服务器请求文件是一样的,前台 ...

随机推荐

  1. Java推断和检查网络

    在实践项目中.常常要处理网络异常等问题.为此,专门设计一个类,随时能够使用. import java.io.IOException; import java.net.InetAddress; impo ...

  2. RatingBar android:isIndicator="true"

    有时候我们用RatingBar只须要显示不让它选择或改变,解决办法是设置属性 android:isIndicator="true" isIndicator的意思是:是否是指示器,如 ...

  3. system.web section group下的section

    private Configuration _configuration; private ConfigurationSectionGroupCollection sectionGroups; pri ...

  4. Ip获取请求ip

    public class IPAdress { public static bool isIP(string str1) { || str1.Length > ) return false; s ...

  5. VS2010中使用AnkhSvn

    VS2010中使用AnkhSvn   今天想到要在自己的开发环境IDE(Visual Studio 2010)中安装一个代码管理器的插件,本人在使用VS2005的时候一直都是使用AnkhSvn-2.1 ...

  6. 大文件Copy 大数据量复制

    private void button3_Click(object sender, EventArgs e)        {                        Thread thread ...

  7. js的45个技巧

    JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...

  8. codevs1085数字游戏(环形DP+划分DP )

    1085 数字游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单, ...

  9. [Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. Linux下sublime 无法输入中文的解决

    个人认为linux下的编辑器,对于小白来说,最好用的就是sublime了,但是,安装之后敲代码无法输入中文 ,很尴尬. 百度后,发现了解决方法. 项目链接:https://github.com/lyf ...