Vue自定义省市区三级联动

本文实例为大家分享了Vue自定义省市区三级联动的具体代码,供大家参考,具体内容如下

1.如图(省市区加上全部联动)

第一步:找到了一个普通的省市区先进行遍历更改

2.把更改后的json文件放入vue项目中引入到你想要的页面

3.剩余代码如下

<template>
  <div class="percentloop">
     <!-- 地区选择 -->
      <section class="section">
        <p class="tittle">
          <span class="important_font">*</span>
          <span>地区筛选</span>
        </p>
 
        <div class="box">
          <div class="area">
            <!-- 省 -->
            <li class="area-menu province-list">
              <div class="area-msg" @click.stop="show(0)">
                {{areaList[province].provinceName}}
              </div>
              <ul v-show="showindex[0]">
                <li v-for="(item,index) in areaList" :key="index"
                  @click.stop="selprovinceName(index,item.provinceName)">
                  {{item.provinceName}}
                </li>
              </ul>
            </li>
            <span class="text">省</span>
 
            <!-- 市 -->
            <li class="area-menu city-list">
              <div class="area-msg" @click.stop="show(1)">
                {{areaList[province].areaVOList[cityIndex].cityName}}
              </div>
              <ul v-show="showindex[1]">
                <li v-for="(item,index) in areaList[province].areaVOList" :key="index"
                  @click.stop="selcityName(index,item.cityName)">
                  {{item.cityName}}
                </li>
              </ul>
            </li>
            <span class="text">市</span>
 
            <!-- 区 -->
            <li class="area-menu region-list">
              <div class="area-msg" @click.stop="show(2)">
                {{areaList[province].areaVOList[cityIndex].areaVOList[countyIndex].countyName}}
              </div>
              <ul v-show="showindex[2]" style="right:-40px;">
                <li v-for="(item,index) in areaList[province].areaVOList[cityIndex].areaVOList" :key="index"
                  @click.stop="selcountyName(index,item.countyName)">
                  {{item.countyName}}</li>
              </ul>
            </li>
 
            <span class="text">区/县</span>
          </div>
        </div>
      </section>
 
 
  </div>
</template>
 
<script>
  let data = {
    areaList: [], //省市区三级联动的数据
        InitializeList: [], //我写得联动数据
 
        showindex: [false, false, false], //控制省市区弹框显示
 
        province: 0, //默认省下标
        cityIndex: 0, //默认市下标
        countyIndex: 0, //默认区下标
 
        istoubi: false,
        selectType: 0, //默认广告类型索引   全部
        attr1Index: -1, //默认广告位置类型索引   
        attr2Index: -1, //默认设备类型索引    
 
        //发送给后台的值
        address_str: ['全部', '全部', '全部'], //地址
 
        select_parmas: {
          county: '全部,全部,全部', //省市区
          selectTypeID: -1, //选择的广告类型id
          selectAttr1ID: -1, //选择的广告位置id
          selectAttr2ID: -1, //选择的设备类型id
        }
  }
 
  $('html').click(function (e) {
    data.showindex = [false, false, false]
  })
 
  import Area from '../../static/json/area.json'
 
  export default {
    data() {
      return data
    },
    created() {
      console.log(this.area)
      this.areaList = this.area[0];
 
      // console.log(Area)
      // this.areaList = Area[0];
    },
 
    methods: {
 
     //显示下拉框
      show(index) {
        let arr = [...this.showindex];
        //弹框显示时 直接全部隐藏
        if (arr[index] == true) {
          arr = [false, false, false]
        } else {
          arr = [false, false, false] //初始化全部隐藏
          arr[index] = true
        }
 
        this.showindex = arr;
      },
 
      //省的点击事件
      selprovinceName(index, value) {
        this.showindex = [false, false, false]
 
        this.province = index;
        this.cityIndex = 0; //默认市下标
        this.countyIndex = 0; //默认区下标
 
        let address = [...this.address_str]
        address[0] = value;
        this.address_str = address;
 
      },
 
      //市的点击事件
      selcityName(index, value) {
        this.showindex = [false, false, false]
        this.cityIndex = index;
        this.countyIndex = 0; //默认区下标
 
        let address = [...this.address_str]
        address[1] = value;
        this.address_str = address;
      },
 
      //区的点击事件
      selcountyName(index, value) {
        this.showindex = [false, false, false]
        this.countyIndex = index;
 
        let address = [...this.address_str]
        address[2] = value;
        this.address_str = address;
      },
 
    },
 
  }
 
</script>
 
<style scoped lang="scss">
  @import "../common/common";
  .section {
      box-sizing: border-box;
      margin-bottom: 0.38rem;
 
      .tittle {
        margin-bottom: 0.2rem;
      }
 
      .box {
        .labelspan {
          margin-right: 0.18rem;
          margin-bottom: 0.19rem;
          box-sizing: border-box;
        }
 
        //视频时长
        .longvalue {
          display: flex;
          flex-wrap: nowrap;
          align-items: center;
          margin-bottom: 0.1rem;
 
          .time_box {
            width: 1.6rem;
            height: 0.56rem;
            line-height: 0.56rem;
            border: 1px solid rgba(230, 230, 230, 1);
            border-radius: 0.1rem;
            padding-left: 0.38rem;
            margin: 0 0.17rem;
 
          }
        }
 
 
        //选择投放时间
        .slect {
          width: 100%;
          line-height: 0.56rem;
          border: 1px solid rgba(230, 230, 230, 1);
          border-radius: 0.1rem;
          padding-left: 0.2rem;
          color: #4984EB;
        }
 
        //选择时间段
        .slect_time {
          display: flex;
          flex-wrap: nowrap;
          align-items: center;
 
          .middle {
            margin: 0 0.24rem;
            line-height: 0.56rem;
          }
 
          .time_box {
            width: 1.6rem;
            height: 0.56rem;
            line-height: 0.56rem;
            border: 1px solid rgba(230, 230, 230, 1);
            border-radius: 0.1rem;
            padding-left: 0.38rem;
          }
        }
 
 
      }
 
      .tip {
        //   margin-top: 
      }
    }
 
 
      .area {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
 
    .text {
      margin: 0 0.15rem;
    }
 
    .area-menu {
      position: relative;
      display: inline-block;
 
      .area-msg {
        width: 1.5rem;
        height: 0.56rem;
        line-height: 0.56rem;
        background-color: #fff;
        border: 1px solid #dcdcdc;
        border-radius: 0.1rem;
        text-align: center;
        overflow: hidden;
      }
 
      ul {
        position: absolute;
        top: 0.57rem;
        width: 160px;
        height: auto;
        max-height: 180px;
        font-size: 14px;
        overflow-y: scroll;
        background-color: #fff;
        border: 1px solid #ddd;
        border-radius: 4px;
 
        li {
          text-align: center;
          height: 30px;
          line-height: 30px;
        }
      }
    }
  }
 
</style>

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

(0)

相关推荐

  • 详解Vue、element-ui、axios实现省市区三级联动

    现在大部分电商的网站.app都需要用户或者管理者去选择设置地区等位置信息.下面我就介绍一下前端开发者用vue,axios,element-ui开发一个省市区三级联动的组件. 1.准备工作,首先我们需要全中国的省市区资源的json数据(科普一下:前六位数字是身份证前六位) 2.搭建vue-cli,安装axios,element-ui,创建vue,webpack项目 1). 在控制台或者终端执行以下代码,其中只需要路由(y),其他e2e,eslint这些不需要(y) vue init webpack

  • vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)

    本文介绍了vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动) 先去下载一个"省份.城市.区县.乡镇" 四级联动数据,然后 引入 import { Picker } from 'mint-ui'; //前提是npm install mint-ui -S Vue.component(Picker.name, Picker); 组件使用 <mt-picker :slots="addressSlots" class="picke

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

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

  • vue基于element-china-area-data插件实现省市区联动

    目录 前言 安装 代码样例 案例 省市二级联动(不带“全部”选项): 省市二级联动(带“全部”选项): 省市三级联动(不带“全部”选项): 省市三级联动(带“全部”选项): 前言 前端开发的同学们应该都知道,省市区联动在日常开发中用的非常多,今天跟大家分享一款好用的插件 — element-china-area-data. 安装 npm install element-china-area-data -S cnpm install element-china-area-data -S 代码样例

  • 使用vue2实现带地区编号和名称的省市县三级联动效果

    我们知道省市区县都有名称和对应的数字唯一编号,使用编号可以更方便查询以及程序处理,我们今天来了解一下使用vue2来实现常见的省市区下拉联动选择效果. 准备数据源 我们的省市区县的数据源来自本站文章 <基于Vue2的简易的省市区县三级联动组件> 中的districts.js,感谢 v-distpicker作者.districts.js中的数据格式大概是这样的: export default { 100000: { 110000: '北京市', 120000: '天津市', 130000: '河北

  • 基于Vue2实现简易的省市区县三级联动组件效果

    这是一个基于Vue2的简易省市区县三级联动组件,可以控制只显示省级或只显示省市两级,可设置默认值等.提供原始省市县代码和名称数据,适用于各种有关城市区县的应用. 安装 我们使用npm安装: npm install v-distpicker --save 使用 首先在模板中加入组件: <v-distpicker></v-distpicker> 如果要带默认值,则可以这样: <v-distpicker province="广东省" city="广州市

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

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

  • Vue2仿淘宝实现省市区三级联动

    三级联动,随着越来越多的审美,出现了很多种,好多公司都仿着淘宝的三级联动 ,好看时尚,so我们公司也一样--为了贴代码方便,我把写在data里面省市区的json独立了出来,下载贴进去即可用,链接如下:vue.json(这个直接是个data,放入你的vue2项目中即可.(因为我的项目是用的vue2,所以,其他的属性跟博客内容是吻合的.请配合博客再下载此json)). 首先页面显示如下: 然后我们县级所在地区会出现三级联动,如下:(以下是片段,背景色未截取) 这个张什么样,以什么形式出现,取决于贵公

  • Vue实现省市区三级联动

    本文实例为大家分享了Vue实现省市区三级联动的具体代码,供大家参考,具体内容如下 效果图: 代码: <!DOCTYPE html> <html> <head> <meta charset="GBK"> <title></title> <style> </style> </head> <body> <div id="app" > <

  • Vue自定义省市区三级联动

    本文实例为大家分享了Vue自定义省市区三级联动的具体代码,供大家参考,具体内容如下 1.如图(省市区加上全部联动) 第一步:找到了一个普通的省市区先进行遍历更改 2.把更改后的json文件放入vue项目中引入到你想要的页面 3.剩余代码如下 <template>   <div class="percentloop">      <!-- 地区选择 -->       <section class="section">

  • layui自定义插件citySelect实现省市区三级联动选择

    本文实例为大家分享了layui实现省市区三级联动选择的具体代码,供大家参考,具体内容如下 省市区三级菜单联动插件 /** * @ name : citySelect 省市区三级选择模块 * @ Author: aggerChen * @ version: 1.0 */ layui.define(['layer','form','element','laytpl'], function(exports){ var $ = layui.$; var form = layui.form; var la

  • 微信小程序自定义yPicker组件实现省市区三级联动功能

    自从上一篇文章:微信小程序自定义日历组件及flex布局最后一行对齐问题分析 出来以后,有人私聊我说能不能从头分析一下我开源的自定义组件?一直没时间.这不,最近项目中有个需求是 省市区三级联动 ,我就顺便从组件库中的第一个 「扩展日期-时间picker(点此直接至GitHub,欢迎star)」组件开始说一下这两个功能的实现. 简单说一下"自定义日期-时间组件" 它的背景是项目的第一版当时发现微信小程序内置的日期组件:picker只能精确到某一天(年月日),但是我们很多时候需要年月日时分甚

  • 原生js实现省市区三级联动代码分享

    前言 插件功能只满足我司业务需求,如果希望有更多功能的,可在下方留言,我尽量扩展!如果你有需要或者喜欢的话,可以给我github来个star 准备 <div id="wrap"></div> 页面中的容器标签不限制,只需给个id就行 var address = new Address({ wrapId: 'wrap', showArr: ['provinces','citys','areas'], beforeCreat:function(){ console.

  • 使用mint-ui实现省市区三级联动效果的示例代码

    引用插件:饿了么的mint-ui组件中的picker功能,具体API可参照官网说明:http://mint-ui.github.io/docs/#/zh-cn2/picker 背景:项目需要做一个省份-城市-地区的选择级联效果,我从gayhub上找了一下,决定使用mint-ui的组件,因为各个功能都很全而且设计跟我们的项目风格类似. 具体实现: 通过阅读官网的实例,大概就能知道这个组件的用法: 在vue中写入组件:<mt-picker :slots="slots" @change

  • PHP+Mysql+Ajax+JS实现省市区三级联动

    基本思想就是:在JS动态创建select控件的option,通过Ajax获取在PHP从SQL数据库获取的省市区信息,代码有点长,但很多都是类似的,例如JS中省.市.区获取方法类似,PHP中通过参数不同执行不同的select语句. index.html代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xh

  • javascript实现省市区三级联动下拉框菜单

    本文实例讲述了javascript实现省市区三级联动下拉框菜单代码.分享给大家供大家参考.具体如下: 运行效果截图如下: 首先写一个静态的页面: <!DOCTYPE html> <html> <head> <title>QQ JS省市区三级联动</title> <!-- 使用QQ的省市区数据 --> <!-- <script type="text/javascript" src="http:/

随机推荐