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.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的使用相关推荐
- vue中级联选择器回填_浅谈Vue使用Cascader级联选择器数据回显中的坑
业务场景 由于项目需求,需要对相关类目进行多选,类目数据量又特别大,业务逻辑是使用懒加载方式加载各级类目数据,编辑时回显用户选择的类目. 问题描述 使用Cascader级联选择器过程中主要存在的应用问 ...
- 中国省市区三级联的JSON格式
网上的json中国省市区好像都不全,不然就是格式不对,自己费了好大功夫,终于弄好了,分享给大家,有钓鱼岛的哦 [ { "name": "北京", "c ...
- vue + element cascader级联选择器编写城市选择器
需求: 1.城市选择 2.城市输入 实现: html <el-cascader:options="options"change-on-selectfilterable@cha ...
- vue+element el-cascader级联选择器,点击lebel选中
官方文档只能在点击选择框的时候才能选中,在某些实际操作中需要点击lebel就选中,加上下面的代码就可以了 mounted() {setInterval(function () {document.qu ...
- 基于Vue的省市区三联的地区选择器V-Distpicker的使用及踏过的坑...
最近用的Vue+Element UI时,有些地方需要用到省市区三联选择器,网上安装并尝试了多种类似的插件,但都因为无法正常实现或是没有眼缘而弃用了.最后选择的是V-Distpicker这种,配置和使用 ...
- vue利用级联选择器实现全国省市区乡村五级菜单联动
" 大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂. " 现在是:2022年2月13日20:09:27 今天分享一个五级级联地址的组件的使用吧. 前言 接到这样的一个需求:需要 ...
- 前端学习(2002)vue之电商管理系统电商系统之绘制商品分类的级联选择器
目录结构 router.js import Vue from 'vue' import Router from 'vue-router' import Login from './components ...
- 省市区级联选择器在element中的应用
1.在 src/assets 下添加pca.json 链接: pca.json. 2.导入并引用pca.json import pca from '@assets/pca.json' 3.使用级联选择 ...
- vue element-ui级联选择器选中后下拉框自动收起
Cascader 级联选择器 数据渲染 通过 :options="options" 映射,让每一级都可以选择(选项前会有圆圈可勾选)设置属性 :props="{ chec ...
最新文章
- 完全解读ping命令应用方法
- TLS/SSL测试工具
- c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?
- django ipython shell_通過django的shell_plus編寫ipython腳本
- stol函数在linux下使用,Linux下ATT汇编语法简介一
- 一个交易平台源码,全源无接口
- php v9验证码错误,PHPCMS v9后台登陆提示验证码错误的解决方法
- 英国国家网络安全中心:速修复严重的 MobileIron RCE 漏洞 (CVE-2020-15505)
- 使用json对象要注意的地方
- JanusGraph 数据模型
- 工控机上位机软件的开发历程(二)
- 网络wifi测试软件app,WIFI检测精灵
- vmbox挂载共享目录
- 推荐一些有趣的在线编程游戏
- AI虚拟数字人直播带货软件 AI数字人直播间怎么搭建 搭建教程分享
- 使用FontCreator打造属于自己的字体
- (附源码)spring boot网上购物系统 毕业设计 311236
- 热点新闻管理系统设计与实现
- “热榜第一”阿里年薪80W的Java架构师,到底是有着怎样的水平?
- python点云拼接