vue实现手机端省市区区域选择

本文实例为大家分享了vue实现手机端省市区区域选择的具体代码,供大家参考,具体内容如下

1 后端接口获取城市信息

2 先获取省 根据用户点击的省获取市

3 再根据用户点击的市获取区

组件代码:

<template>
 <div class="city">
 <!-- 点击此处 省市区选择出现 -->
  <div class="chooseCity" @click="clickCity">{{chooseCity}}</div>
  <div class="boxcity" v-if="showCity">
  <!-- 省市区的标题 点击可回退 -->
  <div class="chooseTit">
   <p @click="chooseProvince" v-show='tit1'>{{chooseTit1}}</p>
   <p @click="chooseCity2" v-show='tit2'>{{chooseTit2}}</p>
   <p v-show='tit3'>{{chooseTit3}}</p>
  </div>
  <!-- 省市区 -->
  <div class="citys">
  <div @click="getCity" class="province">
   <ul v-show="showProvince">
   <li v-for="item in provinceL" :key="item.regionId" @click="getProvince(item)">{{item.regionName}}</li>
  </ul>
  <ul v-show="showCity2">
   <li v-for="item in cityL" :key="item.regionId" @click="getCity2(item)">{{item.regionName}}</li>
  </ul>
   <ul v-show="showarea">
   <li v-for="item in areaL" :key="item.regionId" @click="getarea(item)">{{item.regionName}}</li>
  </ul>
  </div>
  </div>
  </div>
  <!-- 遮罩层 -->
  <div class="mask" v-show="mackShow" @click="closeMask"></div>
 </div>
</template>

<script>
export default {
 data () {
 return {
  chooseCity:"点击我选择",
  selected : '',
  citySelected: '',
  areaSelected: '',
  provinceL : [],
  cityL  : [],
  areaL  : [],
  city  : [],
  provinceName: '',
  cityName : '',
  areaName : '',
  showProvince:true,
  showCity:false,
  showCity2:false,
  showarea:false,
  chooseTit1:"省",
  chooseTit2:"市",
  chooseTit3:"区",
  tit1:true,
  tit2:false,
  tit3:false,
  mackShow:false,
  province:"",
  Nextcity:"",
  district:"",
  totalCity:"",
}
 },
 methods:{
 //点击省市标题隐藏出现内容 形成回退效果
 chooseProvince(){
  this.showProvince = true;
  this.showCity2 = false;
 },
 chooseCity2(){
  this.showProvince = false;
  this.showCity2 = true;
  this.showarea = false;
 },
 //点击省市区出现
 clickCity(){
  this.showCity = true;
  this.mackShow = true;
 },
 //点击省市区 让每个li内展示的名字等于数据的城市名
 getCity(){
  for(var item of this.provinceL){
   this.provinceName = item.regionName;
   //this.regionId = item.regionId
  }
 },
 //当用户点击某个省事件 根据省的id获取市
 getProvince(item){
  this.province = item.regionName
  console.log(this.province);
  // console.log(item.regionId);
  this.$axios({
  url:'http://192.168.1.16:0000/insurance-intact-wechat-api/get_regions?parentId='+item.regionId,
  method: 'get'
  }).then(res=>{
  //console.log(res)
   this.cityL  = res.data;
   this.citySelected = this.cityL[0].regionId;
   this.showProvince = false;
   this.showCity2= true;
   this.tit2 = true;
  })

  this.areaL = [];

 },
 //当用户点击某个市事件 根据省的id获取区
 getCity2(item){
  this.Nextcity = item.regionName
  console.log(this.Nextcity);
  // console.log(item.regionId);
  this.$axios({
  url:'http://192.168.1.16:0000/insurance-intact-wechat-api/get_regions?parentId='+item.regionId,
  method: 'get'
  }).then(res=>{
  //console.log(res)
   this.areaL  = res.data;
   this.areaSelected = this.areaL[0].regionId;
   this.showarea = true;
   this.showCity2= false;
   this.tit3 = true;
  })
 },
 //用户点击区或者镇,遮罩消失
 getarea(item){
  this.district = item.regionName;
  console.log(this.district);
  var totalCity = this.province+"," + this.Nextcity +"," +this.district;
  this.chooseCity =totalCity;
  //console.log(item.regionId);
  this.showCity = false;
  this.mackShow = false;
 },

 closeMask(){
  this.showCity = false;
  this.mackShow = false;
 }
 },
 //页面初始化 请求数据 将请求到的城市保存下来
 created() {
   var url="http://192.168.1.16:0000/insurance-intact-wechat-api/get_regions?parentId=0";
     this.$axios({
      method:'get',
      url:url,
      withCredentials: true,
      crossDomain: true,
      data:"data",
      headers: {
        'Content-Type':'application/x-www-form-urlencoded',
      }
     }).then(res=>{
     //console.log(res.data);
     this.provinceL = res.data;

     })
     .catch(error=>{
      console.log(error);
    });
 },
}
</script>

<style scoped>
 .chooseCity{
 width: 100%;
 height: 40px;
 text-align: center;
 line-height: 40px;
 border-bottom: 1px solid #666;
 }
 .boxcity{
 position: absolute;
 width: 40%;
 right: 0;
 top:0;
 height: 60%;
 z-index: 100;
 background: #ffffff;
 }
 .citys{
 border-top: 1px solid #666;
 height: 100%;
 overflow: hidden;
 overflow-y: scroll;
 background: #ffffff;
 }
 .province{
 height: 100%;
 }
 /* 让滚动条不显示 */
 .citys::-webkit-scrollbar {
 display: none;
 }
 ul{
 margin:0;
 padding:0;
 }
li{
 list-style: none;
 margin-top: 10px;
}
.chooseTit {
 display: flex;
 justify-content: space-around;
 width: 100%;
 text-align: center;
 background: #448ff7;
}
.chooseTit p{
 color: #ffffff;
}
.mask{
 position: absolute;
 width: 100%;
 height: 100%;
 background: black;
 opacity: .5;
 top:0;
 left: 0;
 z-index: 90;
}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue省市区三联动下拉选择组件的实现

    我们曾经经常会遇到需要选择省市区的需求,我们可能是找一个插件来实现,但是有了vue之后,我们自己完全可以简单的实现这个效果,并封装为独立的.vue组件,便于日后使用 我们今天来实现一个 利用vuejs开发的 省市区三联动的组件  CitySelect.vue组件 首先来看一下最终的效果(没有写太多的样式...) 组件所需要的省市区的JSON数据(已经封装为commonjs模块了):    provinces.js 这个数据中有这样几个字段: code: 当前省市区的编码 sheng: 当前所在的

  • vue.js模仿京东省市区三级联动的选择组件实例代码

    前言 在最近的工作中需要一个盒京东购物车地址选择相似的一个省市区三级联动选择组件,google查了下都是下拉框形式的,于是自己写了一个,希望对使用vue开发项目的朋友有帮助,下面话不多说了,来一起看看详细的介绍吧. 显示效果如下: 注意:使用vue2.0开发 实例代码 html代码如下 <!--居住地址三级联动选项--> <section class="showChose" v-show="showChose"> <section cl

  • vue实现手机端省市区区域选择

    本文实例为大家分享了vue实现手机端省市区区域选择的具体代码,供大家参考,具体内容如下 1 后端接口获取城市信息 2 先获取省 根据用户点击的省获取市 3 再根据用户点击的市获取区 组件代码: <template> <div class="city"> <!-- 点击此处 省市区选择出现 --> <div class="chooseCity" @click="clickCity">{{chooseC

  • 基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法

    基于Bootstrap做的下拉菜单在电脑浏览器中可正常使用,在手机浏览器中能弹出下拉列表,却不能选择列表中的菜单项,通过自己百度查找原因将bootstrap脚本文件中的ontouchstart 替换为 disable-ontouchstart可以解决,替换后并不能解决.(红米手机UC浏览器不支持,小米手机UC浏览器正常,其他暂时未测试) jquery:v1.11.2 bootstrap:v3.3.4 以下为前台页面代码: <div class="input-group">

  • vue实现移动端省市区选择

    本文实例为大家分享了vue实现移动端省市区选择的具体代码,供大家参考,具体内容如下 效果: 安装: npm install v-distpicker --save 组件代码: <template> <div> <li > <div class="left"> <span>所在地区</span> </div> <div class="right r"> <div cl

  • 基于Vue+ElementUI的省市区地址选择通用组件

    一.缘由 在项目开发过程中,有一个需求是省市区地址选择的功能,一开始想的是直接使用静态地址资源库本地打包,但这种方式不方便维护,于是放弃.后来又想直接让后台返回全部地址数据,然后使用级联选择器进行选择,但发现数据传输量有点大且处理过程耗时,于是又摒弃了这种方法.最后还是决定采用异步的方式进行省市区地址选择,即先查询省份列表,然后根据选择的省份code查询城市列表,最后根据选择的城市列表获取区/县列表,最终根据应用场景不同,给出了两种实现方案. 其中后台总共需要提供4个接口,一个查询所有省份的接口

  • 原生js实现html手机端城市列表索引选择城市

    本文实例为大家分享了js实现手机端城市列表索引选择城市的具体代码,供大家参考,具体内容如下 html部分: <div class="cityPage"> <div class="cityContent"> <div class="inputBox"> <input type="text" placeholder="中文 / 拼音首字母" id="findc

  • H5手机端多文件上传预览插件

    基于zepto,支持多文件上传,进度和图片预览,用于手机端. (function ($) { $.extend($, { fileUpload: function (options) { var para = { multiple: true, filebutton: ".filePicker", uploadButton: null, url: "/home/MUploadImg", filebase: "mfile",//mvc后台需要对应的

  • Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)

    在开发过程中,为了效果好看,往往需要自己开发一个下拉列表,而不是使用 HTML 自身的 select 下拉列表.然而当编写自定义下拉列表的时候,就会碰到一个问题:如果用户在下拉列表的范围外进行鼠标点击的操作,如何关闭已经打开的下拉列表? 解决思路如下:在 DOM 的根节点上添加一个 click 事件,同时下拉列表内阻止事件的默认行为和冒泡.当响应这个点击事件的时候,说明是在下拉列表范围外的点击(因为下拉列表内阻止了事件的冒泡),就可以关闭已经打开的下拉列表. 如果是纯 JS 代码,有人可能会使用

  • Android仿京东手机端类别页

    京东手机端的类别标签页, 是一个左侧滑动可选择类别, 右侧一个类别明细的列表联动页面. 当用户选择左侧选项, 可在右侧显示更多选项来选择. 实现方式也不少. 最常见的当然是左侧和右侧各一个Fragment, 左侧Fragment放置ListView, 右侧放显示类别明细的Fragment. 如果觉得页面包含的Fragment太多, 左侧直接给一个ListView就可以了.不影响效果. 效果图: 例子中值得注意的三点: 左侧列表点击某个Item可以自动上下滑动,使所点击的item自动移至列表中间

  • PHP 实现手机端APP支付宝支付功能

    最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在蚂蚁金服开放平台创建应用,签约商户,生成应用公钥和私钥: 2.配置统一下单支付参数: 3.整合支付宝demo类文件: 4.创建Alipay支付类,类内创建两个方法(alipay_app:统一下单方法和alipay_notify:支付成功异步回调方法); 第一步主要是在蚂蚁金服开放平台登录你的支付

  • 基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析

    之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件. V3Popup 基于vue3.x实现的移动端弹出框组件,集合msg.alert.dialog.modal.actionSheet.toast等多种效果.支持20+种自定义参数配置,旨在通过极简的布局.精简的调用方式解决多样化的弹框场景. v3popup 在开发之初参考借鉴了Vant3.ElementPlus等组件化思想.并且功能效果和之前vue2.0保持一致. ◆ 快速引入 在main.js中全局引入v3p

随机推荐