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.value
this.temp.addresscity = data.city.value
this.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>

Vue省市区三级联选择器V-Distpicker的使用的更多相关文章

  1. 折叠面板实现,上传文件进度条,三级联选择器,多级联选择器, 利用layui实现

    首先贴出html代码 <form class="layui-form" action=""> <div class="layui-f ...

  2. 省市区三级联选select2.js

    <div class="mui-input-row row_then" id='showCityPicker3'> <input id='cityResult3' ...

  3. vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式

    不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...

  4. vue项目中的element-ui地区级联选择器加详细地址push到对象中不显示的问题

    想要实现级联选择器el-cascader和输入框el-input共同组成的详细地址,添加数据时弹出el-drawer嵌套el-form弹窗,然后在el-form添加数据提交后push到el-table ...

  5. vue+element级联选择器对接后台数据

    1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...

  6. [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果

    [C#]使用 C# 代码实现拓扑排序   目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...

  7. element-ui el-cascader级联选择器设置指定层级不能选中

    有时候用element-ui el-cascader级联选择器添加分类时会遇到最多添加几级的限定.看了文档,只要给需要禁止选择的选项添加disabled属性就可以.但是使用一层一层循环遍历数据感觉很麻 ...

  8. vue手动制作地址选择器

    方法一:4级地址选择器(基于elementui   Cascader 级联选择器) 推荐 效果图: 组件源码: <template> <div class="select- ...

  9. element UI Cascader 级联选择器 编辑 修改 数组 路径 问题(转载)

    来源:https://segmentfault.com/a/1190000014827485 element UI的Cascader级联选择器编辑时 vue.js element-ui 2 eleme ...

随机推荐

  1. LightOJ 1282 Leading and Trailing (数学)

    题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...

  2. 编写高质量代码改善C#程序的157个建议——建议18:foreach不能代替for

    建议18:foreach不能代替for 上一个建议中提到了foreach的两个优点:语法更简单,默认调用Dispose方法,所有我们强烈建议在实际的代码编写中更多的使用foreach.但是,该建议也有 ...

  3. CentOS7-扩容挂载磁盘

    1.1查看新磁盘,可以看到/dev/sdb是新的未挂载的磁盘: [root@localhost ~]# fdisk -l 1.2硬盘分区 ,进入fdisk模式 进入fdisk模式 [root@loca ...

  4. Android学习笔记 - 开始

    因为项目需求,要在Android上开发一个证件识别软件,项目时间 9/10- 9/30 工作内容: (1)修改证件识别库 (2)移植证件识别库至Android (3)开发一个Android应用程序 学 ...

  5. ecliplse集成SVN

    按照下图操作 : SVN不同版本下载链接在文章底部有提供 上图点击add之后稍等一会就会弹出下图: 上图点击next之后: 最后等待完成之后重启ecliplse即可 重启ecliplse之后显示SVN ...

  6. cinder create volume的流程-scheduler调度

    创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...

  7. UIView 动画

    1.UIView 动画 核心动画 和 UIView 动画 的区别: 核心动画一切都是假象,并不会真实的改变图层的属性值,如果以后做动画的时候,不需要与用户交互,通常用核心动画(转场). UIView ...

  8. 转载智能家居 作者:热情的沙漠 出处:http://www.cnblogs.com/buptzym/

    理工男打造帝都89平智能家庭   毕业后的2016年年初,搬入新家,总算不用在出租屋里鬼混了,于是就想把之前童年的梦想:智能家居+家庭影院好好实现一下~ 相比帝都高昂的房价,这些东东还凑合玩得起,不过 ...

  9. 题解 P1434 【滑雪】

    题目链接 此题运用功能强大的 ~~暴力搜索~~ 记忆化搜索才是重点!!! 然而,这是一道经典的DP问题 如果我们用$dis[i][j]$来表示坐标为$(i,j)$时的高度 $cnt[i][j]$ 是我 ...

  10. LongAdder源码学习

    原文链接:https://blog.csdn.net/u011392897/article/details/60480108 LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发 ...