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 ...
随机推荐
- Jmeter跨线程组调用token
BeanShell PostProcessor使用 1.正则提取token后添加:后置处理器-->BeanShell PostProcessor 2.BeanShell PostProcesso ...
- MySQL性能调优与架构设计——第5章 备份与恢复
第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...
- Activity和Fragment的生命周期
- 比特币技术之迷-Transaction 交换
Transaction 交换每个客户端都会广播本地生成的Transaction,并转给来自其它节点的Transaction,本文主要描述Transaction之间的交换与流转过程. 大家也可以阅读以下 ...
- Service Fabric 用 Powershell 部署应用到本地
前置说明 安装 Service Fabric SDK,会在本机 C:\Program Files\Microsoft SDKs\Service Fabric\Tools\PSModule\Servic ...
- Google Earth 8.0
前几天有看到全新的Google Earth 8.0升级,刚好适合自己的手机应用.Google Earth 8.0 官方下载:https://play.google.com/store/apps/det ...
- Mybatis 延迟加载策略
延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 好处: 先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速 ...
- CKEditor富⽂本编辑器
在运营后台,运营⼈员需要录⼊商品并编辑商品的详情信息,⽽商品的详情信息不是普通的⽂本, 可以是包含了HTML语法格式的字符串.为了快速简单的让⽤户能够在⻚⾯中编辑带格式的⽂本,我们引⼊富⽂本编辑器.富 ...
- [agc008f] Black Radius 树形dp
Description 给你一棵有NN个节点的树,节点编号为11到NN,所有边的长度都为11 "全"对某些节点情有独钟,这些他喜欢的节点的信息会以一个长度为NN的字符串ss ...
- loj #2305. 「NOI2017」游戏
#2305. 「NOI2017」游戏 题目描述 小 L 计划进行 nnn 场游戏,每场游戏使用一张地图,小 L 会选择一辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 AAA.BBB. ...