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 方法去执行,其余的都是一样的,后台服务器请求文件是一样的,前台 ...
随机推荐
- s:actionmessage页面样式失效
1, s:actionmessage页面样式失效: 2,解决方式: 将样式直接写入s:actionmessage标签中:<span><s:actionmessage cssSt ...
- ES6 一些常用使用
//1.解构数组 let arr1 = ['apple', 'coffee', 'cake']; let [fruit, drink, dessert] = arr1; console.log(fru ...
- ECMAScript 对象类型
ECMAScript:本地对象.内置对象.宿主对象 一.本地对象: 定义:ECMA-262(ECMAScript语言规范) 定义其为“独立于宿主环境的 ECMAScript 实现提供的对象”.它是由 ...
- java学习笔记:文件名区分大小写
我按照网上的教程,写了JAVA第一个程序:Hello World!,出了两个问题,都栽在 大小写 上. public class Hello { public static void main(Str ...
- 【Unity】用Shader编程实现3D红心
有些形状,即使没有3D美术设计师提供模型,也能够用代码生成. 对于想保持原创性不想借用他人模型的独立开发人员来说,这无非是一个非常重要的途径. 今天献给大家的是用Shader编程实现的一颗红心,寄托下 ...
- Fiddler抓取https请求,解决“证书错误”警告
要抓取走HTTPS内容,Fiddler必须解密HTTPS流量. 但是,浏览器将会检查数字证书,并发现会话遭到窃听.为了骗过浏览 器,Fiddler通过使用另一个数字证书重新加密HTTPS流量. Fid ...
- oc83--自定义类实现copy方法
// // main.m // 自定义类实现copy #import <Foundation/Foundation.h> #import "Person.h" #imp ...
- cmd 批处理文件(.bat)文件的编写
1. 获取当前文件所在的路径信息 CMD获取当前目录的绝对路径 创建如下的名为 test.bat的文本文件: @echo off echo 当前盘符:%~d0 echo 当前盘符和路径:%~dp0 e ...
- springmvc的jar包
<!-- spring框架的的组件构成(springFramework)--> 一.核心部分Core Container 1.1 spring-core,spring-beans 提供控 ...
- 1章 课程介绍 IDEA介绍演示与安装 IDEA安装