微信小程序手动添加收货地址省市区联动


Posted in Javascript onMay 18, 2020

本文实例为大家分享了微信小程序手动添加收货地址省市区联动的具体代码,供大家参考,具体内容如下

先看效果图

微信小程序手动添加收货地址省市区联动

微信小程序手动添加收货地址省市区联动

html部分

用小程序的piceker-view 嵌入页面的滚动选择器

<picker-view indicator-style="height: 50px;" style="width:100%; height: 400rpx;" bindchange="bindChange">
 <picker-view-column class="selectItem">
 <view class="tooth" wx:for="{{province}}" wx:key="this">{{item.name}}</view>
 </picker-view-column>
 <picker-view-column class="selectItem">
 <view class="tooth" wx:for="{{city}}" wx:key="this">{{item.name}}</view>
 </picker-view-column>
 <picker-view-column class="selectItem">
 <view class="tooth" wx:for="{{area}}" wx:key="this">{{item.name}}</view>
 </picker-view-column>
</picker-view>

js部分

这部分代码其实是因为后端同学太懒了,数据没有整理就直接返回过来了。我人微言轻的,只好自己默默地整理了。

// 把数据格式化成页面现实的形式
 formatCityData: function () {
 var that = this,
 region = that.data.region,
 selectItems = [],
 province = [],
 city = [],
 area = [],
 area_index = that.data.area_index,
 city_index = that.data.city_index,
 province_index = that.data.province_index;
 // 第一遍格式化数据,
 for (var i = 0; i < region.length; i++) {
 if (region[i].parent_id == 1) {
 var provinceItem = region[i];
 var selectItem1 = { label: provinceItem.zh_name, provinceId: provinceItem.id, children: [] };
 for (var j = 0; j < region.length; j++) {
  if (region[j].parent_id == provinceItem.id) {
  var cityItem = region[j];
  var selectItem2 = { label: cityItem.zh_name, cityId: cityItem.id, children: [] };
  selectItem1.children.push(selectItem2);
  for (var k = 0; k < region.length; k++) {
  if (region[k].parent_id == cityItem.id) {
  var areaItem = region[k];
  var selectItem3 = { label: areaItem.zh_name, areaId: areaItem.id, children: [] };
  selectItem2.children.push(selectItem3);
  }
  }
  }
 }
 selectItems.push(selectItem1);
 }
 }
 // 遍历所有的数据。将省的名字放在对应的数组中
 for (let i = 0; i < selectItems.length; i++) {
 province.push({
 name: selectItems[i].label,
 id: selectItems[i].provinceId
 });
 }
 if (selectItems[province_index].children && selectItems[province_index].children) {// 判断选中的省级里面有没有市
 if (selectItems[province_index].children[city_index]) {
 for (let i = 0; i < selectItems[province_index].children.length; i++) {
  city.push({
  name: selectItems[province_index].children[i].label,
  id: selectItems[province_index].children[i].cityId
  });
 }
 if (selectItems[province_index].children[city_index].children) {
  if (selectItems[province_index].children[city_index].children[area_index]) {
  for (let i = 0; i < selectItems[province_index].children[city_index].children.length; i++) {
  area.push({
  name: selectItems[province_index].children[city_index].children[i].label,
  id: selectItems[province_index].children[city_index].children[i].areaId
  });
  }
  } else {
  that.setData({
  area_index: 0
  });
  for (let i = 0; i < selectItems[province_index].children[city_index].childre.length; i++) {
  area.push({
  name: selectItems[province_index].children[city_index].children[i].label,
  id: selectItems[province_index].children[city_index].children[i].areaId
  });
  }
  }
 } else {
  area.push({
  name: province[province_index].children[city_index].label,
  id: province[province_index].children[city_index].areaId
  });
 }
 } else {
 that.setData({
  city_index: 0
 });
 for (let i = 0; i < selectItems[province_index].childre.length; i++) {
  city.push({
  name: selectItems[province_index].children[i].label,
  id: selectItems[province_index].children[i].cityId
  });
 }
 }
 } else {
 // 如果该省没有市,那么就把省的名字作为市和区的名字
 city.push({
 name: province[province_index].label,
 id: province[province_index].cityId
 });
 area.push({
 name: province[province_index].label,
 id: province[province_index].areaId
 });
 }
 // 选择成功后把对应的数组赋值给相应的变量
 that.setData({
 province: province,
 city: city,
 area: area
 });
 provincialCity = {
 province: {
 name: province[that.data.province_index].name,
 id: province[that.data.province_index].id,
 },
 city: {
 name: city[that.data.city_index].name,
 id: city[that.data.city_index].id
 },
 area: {
 name: area[that.data.area_index].name,
 id: area[that.data.area_index].id
 } 
 }
 },

后台返回的格式如下:

微信小程序手动添加收货地址省市区联动

微信小程序手动添加收货地址省市区联动

// 选择城市
 bindChange: function (e) {
 const val = e.detail.value;
 this.setData({
 province_index: val[0],
 city_index: val[1],
 area_index: val[2]
 });
 this.formatCityData();
 },

前面说的是新增收获地址,后面是编辑

html部分

微信小程序手动添加收货地址省市区联动

value就是用来回显之前选择的城市。

微信小程序手动添加收货地址省市区联动

把整理好的省市区分别遍历一下,把当前的id与数据中的id作对比。把相对应的数据的下标给取出来。

this.data.province.map(function(val, key) {
 if (val.id === that.data.result.province.id) {
 provinceId = key;
 }
 return provinceId;
 })
 this.setData({
 province_index: provinceId
 });
 this.formatCityData();
 this.data.city.map(function(val, key) {
 if (val.id === that.data.result.city.id) {
 cityId = key;
 }
 return cityId;
 })
 this.setData({
 city_index: cityId
 });
 this.formatCityData();
 this.data.area.map(function (val, key) {
 if (val.id === that.data.result.area.id) {
 areaId = key;
 }
 return areaId;
 })
 var lists = [provinceId, cityId, areaId];
 this.setData({ cityShow: lists });

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
js中的内部属性与delete操作符介绍
Aug 10 Javascript
js实现瀑布流的三种方式比较
Jun 28 Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 Javascript
微信小程序 实现tabs选项卡效果实例代码
Oct 31 Javascript
vue使用watch 观察路由变化,重新获取内容
Mar 08 Javascript
Node.js调试技术总结分享
Mar 12 Javascript
使用 Node.js 对文本内容分词和关键词抽取
May 27 Javascript
详解webpack+express多页站点开发
Dec 22 Javascript
jQuery中实现text()的方法
Apr 04 jQuery
swiper4实现移动端导航栏tab滑动切换
Oct 16 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 #Javascript
django简单的前后端分离的数据传输实例 axios
May 18 #Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 #Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 #Javascript
react 生命周期实例分析
May 18 #Javascript
react使用CSS实现react动画功能示例
May 18 #Javascript
Node.js API详解之 net模块实例分析
May 18 #Javascript
You might like
PHP中的超全局变量
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
PHP获取文件扩展名的常用方法小结【五种方式】
2018/04/27 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
Jquery性能优化详解
2014/05/15 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
Vue.js实现无限加载与分页功能开发
2016/11/03 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
javascript html5轻松实现拖动功能
2017/03/01 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
JS如何设置元素样式的方法示例
2017/08/28 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Python封装原理与实现方法详解
2018/08/28 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
django写用户登录判定并跳转制定页面的实例
2019/08/21 Python
Python谱减法语音降噪实例
2019/12/18 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
建筑专业毕业生求职信
2014/09/30 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
拾金不昧通报表扬范文
2015/05/05 职场文书
教师外出学习心得体会
2016/01/18 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
opencv检测动态物体的实现
2021/07/21 Python