Vue省市区三级联选择器V-Distpicker的使用
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的使用的更多相关文章
- 折叠面板实现,上传文件进度条,三级联选择器,多级联选择器, 利用layui实现
首先贴出html代码 <form class="layui-form" action=""> <div class="layui-f ...
- 省市区三级联选select2.js
<div class="mui-input-row row_then" id='showCityPicker3'> <input id='cityResult3' ...
- vue+element ui项目总结点(一)select、Cascader级联选择器、encodeURI、decodeURI转码解码、mockjs用法、路由懒加载三种方式
不多说上代码: <template> <div class="hello"> <h1>{{ msg }}</h1> <p> ...
- vue项目中的element-ui地区级联选择器加详细地址push到对象中不显示的问题
想要实现级联选择器el-cascader和输入框el-input共同组成的详细地址,添加数据时弹出el-drawer嵌套el-form弹窗,然后在el-form添加数据提交后push到el-table ...
- vue+element级联选择器对接后台数据
1.后台接口返回的数据肯定要和级联选择器的数据一致,所以我专门弄个model存放返回的值,如下:/** * @Auther: GGDong * @Date: 2019/4/3 10:30 */@Get ...
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
[C#]使用 C# 代码实现拓扑排序 目录 0.参考资料 1.介绍 2.原理 3.实现 4.深度优先搜索实现 回到顶部 0.参考资料 尊重他人的劳动成果,贴上参考的资料地址,本文仅作学习记录之用. ...
- element-ui el-cascader级联选择器设置指定层级不能选中
有时候用element-ui el-cascader级联选择器添加分类时会遇到最多添加几级的限定.看了文档,只要给需要禁止选择的选项添加disabled属性就可以.但是使用一层一层循环遍历数据感觉很麻 ...
- vue手动制作地址选择器
方法一:4级地址选择器(基于elementui Cascader 级联选择器) 推荐 效果图: 组件源码: <template> <div class="select- ...
- element UI Cascader 级联选择器 编辑 修改 数组 路径 问题(转载)
来源:https://segmentfault.com/a/1190000014827485 element UI的Cascader级联选择器编辑时 vue.js element-ui 2 eleme ...
随机推荐
- Cloud Design Patterns: Prescriptive Architecture Guidance for Cloud Applications
January 2014 Containing twenty-four design patterns and ten related guidance topics, this guide arti ...
- C++中的Trivial 、POD、non-POD和Standard Layout概念
POD types non-POD types Standard Layout types A Formal Definition Informally, a standard layout clas ...
- 编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护
建议40:使用event关键字为委托施加保护 在建议中我们实现了一个具有通知功能的文件传输类,如下: class FileUploader { public delegate void FileUpl ...
- 如何恢复VS2013代码实时校验功能
VS2013在某一天突然无法进行实时代码校验了,只有在编译的时候,错误列表才显示语法错误 怎么来解决这个问题呢?试试环境重置吧. 首先:打开工具菜单,选择“导入和导出设置”. 其次:可以先导出选定 ...
- 【转】Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/18234477 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...
- jQuery之方法绑定(事件注册)代码小结
1.最直接的模式,直接将一个function对象传入方法函数,如下面的click(),好处坏处一看便知 $("#btnComfirmChooseCompany").click(fu ...
- 严选 Android 路由框架优化(下篇)
3 router 框架优化 3.1 apt 生成代码量过大问题优化 思考框架本身,其实可以发现仅有 router 映射表是需要根据注解编译生成的,其他的全部代码都是固定代码,完全可以 sdk 中直接编 ...
- linux系统使用sh文件传参数给matlab程序
linux系统下使用sh文件传参数给matlab程序 (1)编写sh文件 程序以下面的行开始(必须在文件的第一行): #!/bin/sh 定义需要传递的参数,用双引号引起,参数之间使用逗号或分 ...
- kali linux之被动信息收集(dns信息收集,区域传输,字典爆破)
公开可获取的信息,不与目标系统产生交互,避免留下痕迹 下图来自美军方 pdf链接:http://www.fas.org/irp/doddir/army/atp2-22-9.pdf 信息收集内容(可利用 ...
- C# winform调用类似按钮点击的事件时自带参数该怎么写
//按钮事件 private void btn_Click(object sender, EventArgs e) {} //自己的函数 private void myFunc() { //程序中其他 ...