Vue省市区三级联选择器V-Distpicker的使用

最近用的Vue+Element UI时,有些地方需要用到省市区三联选择器,网上安装并尝试了多种类似的插件,但都因为无法正常实现或是没有眼缘而弃用了。最后选择的是V-Distpicker这种,配置和使用起来还算是比较简单的,下面就分享一下其用法和需要注意的点(需要踩过的坑)。

1.使用方法

安装和文档,请查看官网https://distpicker.pigjian.com/

​ 或者 同性交友网站https://github.com/jcc/v-distpicker

有些小伙伴要说了,不是说好了分享使用方法吗?扔出两个链接就完事啦?嗯...其实呢,我是觉得这个作者文档写的很不错了各种用法介绍的很到位,而且在官网你还能尝试具体操作的嘛(其实就是懒)。

2.需要注意的点

​ 如果是自己玩的话,作者提供的方法就够了,我用的是三级关联不带初始值的这种

官网的code :

<template><v-distpicker @selected="onSelected"></v-distpicker>
<template><script>
import VDistpicker from 'v-distpicker'export default {components: { VDistpicker },methods: {onSelected(data) {alert(data.province + ' | ' + data.city + ' | ' + data.area)console.log(data)},}
}
</script>

​ 这个插件的用法简单,重点就是注意province、city、area值的绑定,这里我用的官方给的selected方法,选择最后一项后触发,talk is cheap,show code !

<v-distpicker v-show="isShowProvince" :class="{'disabled-select': dialogStatus=='update'}" :province="temp.addressprovince" :city="temp.addresscity" :area="temp.address__dist" @selected="onSelected"></v-distpicker><script>
import VDistpicker from 'v-distpicker'export default {components: { VDistpicker },data() {return {temp: {addressprovince: '',addresscity: '',addressdist: '',},}},methods: {onSelected(data) {this.temp.addressprovince = data.province.valuethis.temp.addresscity = data.city.valuethis.temp.addressdist = data.area.value}
}

之后根据每个项目网络接口不同,把值传给后端就行啦。

然而在用Element UI进行表单验证(是否为必填项)的时候,踩了一个坑。Element  UI 验证的时候,是依次验证每一项有没有选择框没填,然而V-Distpicker这东西一个插件里面有三个选择框即需要绑定三个值,这时我灵感一来使用的方法是Element  UI表单验证只验证area的值,因为只有你province与city都选择了,才有可能area也选择了,尝试了一下,大功告成!通过样式穿透的方法,可以更改其子组件的样式:
.disabled-select >>> select {background-color: #f5f7fa;border-color: #e4e7ed;color: #c0c4cc;cursor: not-allowed;
}

注意使用样式穿透时上面那个disabled-select位置的class一定是自己定义的class不能,且不论你是需要穿透的class的父级元素还是祖父级,只要能包含它就可以。 另外style里不能添加lang="scss"。? 不确定

3. 如何有选择性的选递给后端值呢?

按照官网给出的例子选择器选好之后是这样的一种结构

{"province": {"code": "210000","value": "辽宁省"},"city": {"code": "210400","value": "抚顺市"},"area": {"code": "210411","value": "顺城区"}
}

如果我的后台只需要code或者value该如何做? 其实官网最下方已经给出了方法:

Methods

方法 说明 参数
province 选择省份 返回省份的值
city 选择城市 返回城市的值
city 选择地区 返回地区的值
selected 选择最后一项时触发 返回省市区的值

利用上面的方法可以实现只取code还是value 还是其他操作。。

下面是具体案例代码:

<template><div class="addr"><v-distpicker:province="newInfo.province":city="newInfo.city":area="newInfo.district"@province="getProvince"@city="getCity"@area="getArea"></v-distpicker></div>
</template>
<script>
import VDistpicker from "v-distpicker";
import { getAddress, addAddress, updateAddress, delAddress } from "@/api/api";
export default {data() {return {updateIndex: "",newInfoEmpty: {province: "", //省city: "", // 市area: "", // 区receiveName: "", // 收件人姓名addr: "" // 详细地址},newInfo: {province: "", //省city: "", // 市area: "", // 区receiveName: "", // 收件人姓名addr: "", // 详细地址phone: ""},receiveInfoArr: [// {//     id: '',//     province: '', //省//     city: '', // 市//     area: '', // 区//     receiveName: '', // 收件人姓名//     addr: '', // 详细地址// }]};},props: {},components: {VDistpicker},created() {this.getReceiveInfo();},watch: {},computed: {},methods: {bubble(index) {this.currentIndex = index;},updateProvince(data) {this.receiveInfoArr[this.currentIndex].province = data.value;},updateCity(data) {this.receiveInfoArr[this.currentIndex].city = data.value;},updateArea(data) {this.receiveInfoArr[this.currentIndex].district = data.value;},getProvince(data) {this.newInfo.province = data.value;},getCity(data) {this.newInfo.city = data.value;},getArea(data) {this.newInfo.district = data.value;},getReceiveInfo() {//获取收件人信息getAddress().then(response => {console.log(response);this.receiveInfoArr = response;}).catch(function(error) {console.log(error);});},addReceive() {//提交收获信息addAddress(this.newInfo).then(response => {alert("添加成功");// 重置新的this.getReceiveInfo();this.newInfo = Object.assign({}, this.newInfoEmpty);}).catch(function(error) {console.log(error);});},confirmUpdate(id, index) {// 更新收获信息updateAddress(id, this.receiveInfoArr[index]).then(response => {alert("修改成功");this.getReceiveInfo();}).catch(function(error) {console.log(error);});},deleteInfo(id, index) {// 删除收获人信息delAddress(id).then(response => {alert("删除成功");this.getReceiveInfo();}).catch(function(error) {console.log(error);});}}
};
</script>

转载于:https://www.cnblogs.com/wenqiangit/p/10538826.html

Vue省市区三级联选择器V-Distpicker的使用相关推荐

  1. vue中级联选择器回填_浅谈Vue使用Cascader级联选择器数据回显中的坑

    业务场景 由于项目需求,需要对相关类目进行多选,类目数据量又特别大,业务逻辑是使用懒加载方式加载各级类目数据,编辑时回显用户选择的类目. 问题描述 使用Cascader级联选择器过程中主要存在的应用问 ...

  2. 中国省市区三级联的JSON格式

    网上的json中国省市区好像都不全,不然就是格式不对,自己费了好大功夫,终于弄好了,分享给大家,有钓鱼岛的哦 [ { "name": "北京", "c ...

  3. vue + element cascader级联选择器编写城市选择器

    需求: 1.城市选择 2.城市输入 实现: html <el-cascader:options="options"change-on-selectfilterable@cha ...

  4. vue+element el-cascader级联选择器,点击lebel选中

    官方文档只能在点击选择框的时候才能选中,在某些实际操作中需要点击lebel就选中,加上下面的代码就可以了 mounted() {setInterval(function () {document.qu ...

  5. 基于Vue的省市区三联的地区选择器V-Distpicker的使用及踏过的坑...

    最近用的Vue+Element UI时,有些地方需要用到省市区三联选择器,网上安装并尝试了多种类似的插件,但都因为无法正常实现或是没有眼缘而弃用了.最后选择的是V-Distpicker这种,配置和使用 ...

  6. vue利用级联选择器实现全国省市区乡村五级菜单联动

    " 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂. " 现在是:2022年2月13日20:09:27 今天分享一个五级级联地址的组件的使用吧. 前言 接到这样的一个需求:需要 ...

  7. 前端学习(2002)vue之电商管理系统电商系统之绘制商品分类的级联选择器

    目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...

  8. 省市区级联选择器在element中的应用

    1.在 src/assets 下添加pca.json 链接: pca.json. 2.导入并引用pca.json import pca from '@assets/pca.json' 3.使用级联选择 ...

  9. vue element-ui级联选择器选中后下拉框自动收起

    Cascader 级联选择器 数据渲染 通过 :options="options" 映射,让每一级都可以选择(选项前会有圆圈可勾选)设置属性 :props="{ chec ...

最新文章

  1. 完全解读ping命令应用方法
  2. TLS/SSL测试工具
  3. c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?
  4. django ipython shell_通過django的shell_plus編寫ipython腳本
  5. stol函数在linux下使用,Linux下ATT汇编语法简介一
  6. 一个交易平台源码,全源无接口
  7. php v9验证码错误,PHPCMS v9后台登陆提示验证码错误的解决方法
  8. 英国国家网络安全中心:速修复严重的 MobileIron RCE 漏洞 (CVE-2020-15505)
  9. 使用json对象要注意的地方
  10. JanusGraph 数据模型
  11. 工控机上位机软件的开发历程(二)
  12. 网络wifi测试软件app,WIFI检测精灵
  13. vmbox挂载共享目录
  14. 推荐一些有趣的在线编程游戏
  15. AI虚拟数字人直播带货软件 AI数字人直播间怎么搭建 搭建教程分享
  16. 使用FontCreator打造属于自己的字体
  17. (附源码)spring boot网上购物系统 毕业设计 311236
  18. 热点新闻管理系统设计与实现
  19. “热榜第一”阿里年薪80W的Java架构师,到底是有着怎样的水平?
  20. python点云拼接

热门文章

  1. eladmin 后台管理 -- 登录
  2. 数据驱动到底是什么?如何驱动,又能驱动什么?
  3. 苹果如何Design Different
  4. Shell编程之正则表达式(及操作案例)
  5. IO函数 (C库 VS Linux文件系统)
  6. LinuxC编程——文件IO
  7. 【提分trick】SWA(随机权重平均)和EMA(指数移动平均)
  8. 如何在 Mac 或 Windows 上将 PDF 转换为 Word 而不丢失格式
  9. cloudmaker一个云架构的画图工具也支持自动化部署,界面清爽功能好用
  10. Ruoyi Vue版集成JFlowSpringBoot(成功版)