前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13266

效果图如下:

代码实现如下:

cc-selectDity

使用方法


<!-- 省市区选择 show:是否显示  @sureSelectArea:确认事件 @hideShow:隐藏事件--> <cc-selectDity :show="show" @sureSelectArea="onsetCity" @hideShow="onhideShow"></cc-selectDity> main.js文件设置全局函数 Vue.mixin({ methods: { setData: function(obj, callback) { let that = this; const handleData = (tepData, tepKey, afterKey) => { tepKey = tepKey.split('.'); tepKey.forEach(item => { if (tepData[item] === null || tepData[item] === undefined) { let reg = /^[0-9]+$/; tepData[item] = reg.test(afterKey) ? [] : {}; tepData = tepData[item]; } else { tepData = tepData[item]; } }); return tepData; }; const isFn = function(value) { return typeof value == 'function' || false; }; Object.keys(obj).forEach(function(key) { let val = obj[key]; key = key.replace(/\]/g, '').replace(/\[/g, '.'); let front, after; let index_after = key.lastIndexOf('.'); if (index_after != -1) { after = key.slice(index_after + 1); front = handleData(that, key.slice(0, index_after), after); } else { after = key; front = that; } if (front.$data && front.$data[after] === undefined) { Object.defineProperty(front, after, { get() { return front.$data[after]; }, set(newValue) { front.$data[after] = newValue; that.$forceUpdate(); }, enumerable: true, configurable: true }); front[after] = val; } else { that.$set(front, after, val); } }); isFn(callback) && this.$nextTick(callback); } } });

HTML代码实现部分


<template> <view> <view class="editaddress"> <view class="content"> <view class="row"> <view class="nominal">收件人</view> <view class="input"><input placeholder="请输入收件人姓名" v-model="addressData.name" type="text"></input> </view> </view> <view class="row"> <view class="nominal">电话号码</view> <view class="input"><input placeholder="请输入收件人电话号码" v-model="addressData.phone" type="number" maxlength="11"></input></view> </view> <view class="row"> <view class="nominal">所在地区</view> <view class="input selectcity" @tap="openPicker"> <input placeholder="请选择省市区" disabled type="text" v-model="addressData.address"></input> <image src="/static/images/home/right.png" class="rights"></image> </view> </view> <view class="row"> <view class="nominal">详细地址</view> <view class="input"><textarea style="font-size: 28upx;" v-model="addressData.moreAddres" auto-height="true" placeholder="输入详细地址" v-if="show == false"></textarea></view> </view> <view class="row"> <view class="nominal" style="color: #999;margin-top: 10upx;">设为默认地址</view> <view class="input switch"> <switch :color="colors" style="transform:scale(0.8)" @change="switchChange" :checked="addressData.isdefult == 1"></switch> </view> </view> </view> <view class="save"> <view class="btn" :style="'background:' + colors">保存地址</view> </view> <!-- 省市区选择 show:是否显示  @sureSelectArea:确认事件 @hideShow:隐藏事件--> <cc-selectDity :show="show" @sureSelectArea="onsetCity" @hideShow="onhideShow"></cc-selectDity> </view> </view> </template> <script> var app = getApp(); export default { data() { return { colors: '', show: false, addressData: { name: '', phone: '', address: '', moreAddres: '', isdefult: 0 }, isShow: true }; }, components: { }, props: {}, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function() {}, /** * 生命周期函数--监听页面显示 */ onShow: function() {}, /** * 生命周期函数--监听页面隐藏 */ onHide: function() {}, /** * 生命周期函数--监听页面卸载 */ onUnload: function() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function() {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function() {}, /** * 用户点击右上角分享 */ onShareAppMessage: function() {}, methods: { openPicker() { console.log('执行') this.show = true }, onhideShow() { this.show = false console.log('执行了') }, onsetCity(e) { //选中省市区 let data = e.detail.target.dataset; let address = data.province + data.city + data.area; this.show = false this.addressData.address = address }, switchChange(e) { this.setData({ checked: e.detail.value }); } } }; </script> <style lang="scss" scoped> .save { position: fixed; bottom: 0; width: 100%; height: 120upx; display: flex; justify-content: center; align-items: center; } .save view { display: flex; } .save .btn { box-shadow: 0upx 5upx 10upx rgba(0, 0, 0, 0.4); width: 70%; height: 80upx; border-radius: 80upx; background-color: #f23a3a; color: #fff; justify-content: center; align-items: center; font-size: 30upx; margin-bottom: 60px; } .save .btn .icon { height: 80upx; color: #fff; font-size: 30upx; justify-content: center; align-items: center; } .content { display: flex; flex-wrap: wrap; margin-top: 40upx; } .content view { display: flex; } .content .row { width: 92%; margin: 0 4%; border-bottom: solid 1upx #eee; } .content .row .nominal { width: 30%; height: 80upx; font-size: 28upx; font-family: Droid Sans Fallback; font-weight: 400; color: rgba(51, 51, 51, 1); align-items: center; } .content .row .input { width: 70%; padding: 20upx 0; align-items: center; font-size: 28upx; } .content .row .input input { font-size: 28upx; color: #333333; } .content .row .switch { justify-content: flex-end; } .content .row .input textarea { min-height: 40upx; line-height: 40upx; } .content .del_box { width: 100%; display: block; overflow: hidden; margin-right: 30upx; } .content .del { width: 240upx; height: 80upx; float: right; justify-content: center; align-items: center; font-size: 28upx; color: #F23A3A; margin: 0 auto; margin-top: 50upx; border-radius: 38upx; background-color: rgba(255, 0, 0, 0.05); border-bottom: solid 1upx #eee; } .selectcity input { width: 90%; } .selectcity image { width: 40upx; height: 40upx; float: right; } </style>

前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版的更多相关文章

  1. 使用vue自定义简单的消息提示框

    <style scoped> /** 弹窗动画*/ a { text-decoration: none } .drop-enter-active { /* 动画进入过程:0.5s */ t ...

  2. 基于Vue的简单通用分页组件

    分页组件是每一个系统里必不可少的一个组件,分页组件分为两部分.第一部分是模版部分,用于显示当前分页组件的状态,例如正在获取数据.没有数据.没有下一页等等:第二部分是分页数据对象,用于封装一个分页组件的 ...

  3. Java一次返回中国所有省市区三级树形级联+前端vue展示【200ms内】

    一.前言 中国省市区还是不少的,省有34个,市有391个,区有1101个,这是以小编的库里的,可能不是最新的,但是个数也差不了多少. 当一次返回所有的数据,并且还要组装成一个三级树,一般的for,会循 ...

  4. vue自定义指令clickoutside使用以及扩展用法

    vue自定义指令clickoutside使用以及扩展用法 产品使用vue+element作为前端框架.在功能开发过程中,难免遇到使用element的组件没办法满足特殊的业务需要,需要对其进行定制,例如 ...

  5. vue自定义指令clickoutside扩展--多个元素的并集作为inside

    都是个人理解,如果发现错误,恳请大家批评指正,谢谢.还有我说的会比较啰嗦,因为是以自身菜鸡水平的视角来记录学习理解的过程,见谅. 1.前言 产品使用vue+element作为前端框架.在功能开发过程中 ...

  6. 基于Django rest framework 和Vue实现简单的在线教育平台

      一.基于api前端显示课程详细信息 1.调整Course.vue模块 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 2 ...

  7. Vue的简单入门

    Vue的简单入门 一.什么是Vue? vue.js也一个渐进式JavaScript框架,可以独立完成前后端分离式web项目 渐进式:vue可以从小到控制页面中的一个变量后到页面中一块内容再到整个页面, ...

  8. 【picker】选择器组件说明

    picker从底部弹起选择器组件 组件细节: 1) 该组件有五种类型,分别是普通选择器.多列选择器.时间选择器.日期选择器.省市区选择器. 2) 组件内必需包裹内容,不然无法弹出选项 <!-- ...

  9. 前端Vue知识小白

    感觉是已好久没写博文了.今日难得有时间,便写一篇文章.此文章是关于前端知识的,我本身是后端,因工作或其他需要,便学习了前端Vue.此文章是在菜鸟教程上学习的.那么下面进入正文! 首先,Vue.js是一 ...

  10. Vue自定义指令使用场景

    当你第一次接触vue的时候,一定会使用到其中的几个指令,比如:v-if.v-for.v-bind...这些都是vue为我们写好的,用起来相当的爽.如果有些场景不满足,需要我们自己去自定义,那要怎么办呢 ...

随机推荐

  1. Python 人工智能 5秒钟偷走你的声音

    介绍 Python 深度学习AI - 声音克隆.声音模仿,是一个三阶段的深度学习框架,允许从几秒钟的音频中创建语音的数字表示,并用它来调节文本到语音模型,该模型经过培训,可以概括到新的声音. 环境准备 ...

  2. [Java EE]小结:生成全局唯一编号的思路

    并发是一个让人很头疼的问题,通常会在服务端或数据库端做处理,保证在并发下数据的准确性. 为此,简要讨论一下,如何通过解决全局生成唯一编号的并发问题. 1 MySQL数据库的锁 1-0 锁的分类 按锁定 ...

  3. 7.OAuth2

    1.近几天在学习OAuth2协议,实际开发中用的最多的就是授权码模式   2.OAuth2的授权码模式流程:首先是用户去访问资源服务器,服务器会给用户一个授权码:用户根据授权码去访问认证服务器,服务器 ...

  4. python从shp文件中读取经纬度数据

    python从shp文件中读取经纬度数据 没有接触过GIS的人来说shp文件很陌生而且很难打开查看,好在python可以从中提取出自己想要的数据 pyshp库的安装 python的pyshp库可以实现 ...

  5. 部署:mysql搭建多主一从源复制环境

    问题描述:搭建过一主多从的环境,由于数据库数据一致性要求高,有些情景会搭建一主多从的架构,搭建多主一从的模式,相对来说适合数据整合,将多个业务的库整合到一起,方便做查询,也可以当做一个监控其他主库数据 ...

  6. 弱语言返回的数值型变量有可能是int,也有可能是string,该如何赋值给结构体

    包地址 github.com/jefferyjob/go-easy-util... 介绍 在解析弱语言类型返回的 Json 数据时,我们可能会遇到一些麻烦,比如 Json 数据中的数值型变量既可能是 ...

  7. Java学习笔记14

    1.Arrays类 ​ Arrays类包含用于操作数组的各种方法(如排序和搜索).该类没有构造函数,直接使用类名.方法名()的方法调用需要的方法. 常用方法 方法 作用 public static S ...

  8. JUC中常见的集合

    Map: HashMap ===> ConcurrentHashMap List: ArrayList ===> CopyOnWriteArrayList Set: HashSet === ...

  9. 原来Spring能注入集合和Map的computeIfAbsent是这么好用!

    大家好,我是3y,今天继续来聊我的开源项目austin啊,但实际内容更新不多.这文章主是想吹下水,主要聊聊我在更新项目中学到的小技巧. 今天所说的小技巧可能有很多人都会,但肯定也会有跟我一样之前没用过 ...

  10. MySQL(Zip版)安装配置

    MySQL官网下载地址:MySQL 将压缩包内文件夹解压至任意目录,以mysql-5.7.40版本为例 第一步 添加环境变量 将mysql-5.7.40-winx64文件夹内的bin文件夹添加到环境变 ...