vue移动端地址三级联动组件(一)
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移动端地址三级联动组件(一)的更多相关文章
- vue移动端地址三级联动组件(二)
继续上一篇: 子组件css: <style scoped lang="less"> #city { width: 100%; height: 100%; positio ...
- vue仿京东省市区三级联动选择组件
工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,显示效果如下:使用vue2.0开发 ht ...
- Vue如何使用vue-area-linkage实现地址三级联动效果
很多时候我们需要使用地址三级联动,即省市区三级联动.网上有很多插件,在此介绍Vue的一款地区联动插件:vue-area-linkage,下面介绍如何使用这个插件实现地址联动效果: 1. ...
- 中国省市区地址三级联动jQuery插件 案例下载
中国省市区地址三级联动jQuery插件 案例下载 distpicker 是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. 安装 可以通过npm ...
- 中国省市区地址三级联动插件---jQuery Distpicker
插件描述:distpicker是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. [官网]https://fengyuanchen.github ...
- 用vue实现省市县三级联动
我真的没想到这个会困扰到我.最开始以为,不就是直接找个简单的插件就实现了吗,jquery插件找了几个,都没有达到目的. 需求是这样的: 点击input框,弹出一个popup,然后可以滚动选择省,市,县 ...
- vue城市三级联动组件 vue-area-linkage
Install the pkg with npm: // v5之前的版本 npm i --save vue-area-linkage // v5及之后的版本 npm i --save vue-area ...
- vue 移动端轻量日期组件不依赖第三方库
Vue版移动端日期选择组件 1.优点:不需要依赖其他第三方库,灵活可配置: 不需要依赖第三方组件的vue日期移动端组件 小轮子 轻量可复用: https://github.com/BeckReed ...
- jquery_ajax 地址三级联动
jquery 的三级地址联动,原理与javascript类似,只是在触发请求的时候,使用封装好的 $.get ,$post,$.ajax 方法去执行,其余的都是一样的,后台服务器请求文件是一样的,前台 ...
随机推荐
- 通达OA 小飞鱼老师OA工作流设计课程教学网络公开课之HTML基础(一)
通达OA网络教学公开课開始了.有须要的小伙伴们抓住机会奥. 8月29号晚8点不见不散.本次课程的主要内容是通达OA工作流设计课程中须要用到的Html部分学习. 帮忙转发的朋友加送一节VIP课程.
- jQuery 插件开发全解析
jQuery插件的开发包含两种: 一种是类级别的插件开发,即给jQuery加入新的全局函数,相当于给jQuery类本身加入方法.jQuery 的全局函数就是属于jQuery命名空间的函数,还有一种是对 ...
- user agent stylesheet 解决方法
写了一个写了一个页面字体一直是加粗.原来是 strong,b{ user agent stylesheet font-weight:bold; } 引起的 解决方法:又一次定义 strong,b{ f ...
- [Unity UGUI]ScrollRect效果大全
UGUI各种优化效果 本文所实现的UGUI效果需求如下: - 支持缩放滑动效果 - 支持动态缩放循环加载 - 支持大数据固定Item复用加载 - 支持不用Mask遮罩无限循环加载 - 支持Object ...
- java 内存模型 ——学习笔记
一.Java 内存模型 java内存模型把 Java 虚拟机内部划分为线程栈和堆 下面这张图演示了调用栈和本地变量存放在线程栈上,对象存放在堆上. ==>> 一个局部变量可能是 ...
- C - Gr-idian MST
Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement On an xy plane, in an ...
- 【POJ 2965】 The Pilots Brothers' refrigerator
[题目链接] http://poj.org/problem?id=2965 [算法] 位运算 [代码] #include <algorithm> #include <bitset&g ...
- JSP-Runoob:JSP 表达式语言
ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...
- hibernate字段名和属性
字段名和属性名相同 Annotation:默认为@Basic 注意:如果在成员属性没有加入任何注解,则默认在前面加入了@Basic Xml中不用写column 字段名和属性名不同 Annotation ...
- FPC报价模块配置 UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
今天在增加P4厂 FPC报价模块配置,增加刚挠信息节点,在保存时报错:UpdateCommand影响了预期 1 条记录中的 0 保存时使用:SqlDataAdapter批量更新DataTable,怎么 ...