微信小程序之地址联动

这就是我们要实现的效果

<view class="consignee">
<!-- consignee 收件人 -->
  <text>收件人: </text><input type=‘text‘ placeholder=‘请输入姓名‘></input>
</view>
<!-- 手机号 -->
<view class="consignee"> 

  <text>手机号: </text><input type=‘text‘ placeholder=‘请输入手机号‘></input>
</view>
<!--所在地区  -->
<view bindtap=‘selectDistrict‘ class=‘consignee‘>
  <text >所在地区</text>
  <text>{{areaInfo}}</text>
</view>
<!-- 详细地址 -->
<view class=‘consignee‘>
  <text>详细地址</text>
  <input type=‘text‘ placeholder=‘请输入详细地址‘></input>
</view>
<!-- 完成 -->
<button class=‘btn‘>完成</button>

<view class="picker-view" animation="{{animationAddressMenu}}" style="visibility:{{addressMenuIsShow ? ‘visible‘:‘hidden‘}}">
  <view style="height:10% ;width:95%;margin-top:10rpx">
    <text catchtap="cityCancel">取消</text>
    <text style="float: right" catchtap="citySure">确定</text>
  </view>
  <!--"可以显示默认的城市,使用后级联选择城市反应很慢就不使用了-->
  <picker-view style="width: 100%; height: 300px;" bindchange="cityChange" value="{{value}}" wx:key="">
    <picker-view-column>
      <view wx:for="{{provinces}}" class="picker-item" wx:key="index">
        {{item.name}}</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{citys}}" class="picker-item" wx:key="">
        {{item.name}}</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{areas}}" class="picker-item" wx:key="">
        {{item.name}}</view>
    </picker-view-column>
  </picker-view>
</view>

给“所在地区” 绑定点击事件 ‘selectDestrict’

也就是通过触发这个方法从而我们要展示什么 在这里也就是展示picker-view组件

<!--"可以显示默认的城市,使用后级联选择城市反应很慢就不使用了-->
  <picker-view style="width: 100%; height: 300px;" bindchange="cityChange" value="{{value}}" wx:key="">
    <picker-view-column>
      <view wx:for="{{provinces}}" class="picker-item" wx:key="index">
        {{item.name}}</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{citys}}" class="picker-item" wx:key="">
        {{item.name}}</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{areas}}" class="picker-item" wx:key="">
        {{item.name}}</view>
    </picker-view-column>
  </picker-view>

可以看到 我们可以在picker-view标签中定义他的宽高 以及当滑动的时候所触发的方法‘cityChange’

其余的就是利用wx:for的方法去得到相应的数据 巴拉巴拉的 那接下来就是JS阶段了

// pages/address/newAdd.js
let address = require(‘../../utils/city.js‘)
Page({

  /**
   * 页面的初始数据
   */
  data: {
    animationAddressMenu: {},
    addressMenuIsShow: false,
    value: [0, 0, 0],
    provinces: [],
    citys: [],
    areas: [],
    areaInfo: ‘‘
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    var id = address.provinces[0].id
    this.setData({
      provinces: address.provinces,
      citys: address.citys[id],
      areas: address.areas[address.citys[id][0].id],
    })

  },
  // 点击所在地区弹出选择框
  selectDistrict: function (e) {
    var that = this
    // 如果已经显示,不在执行显示动画
    if (that.data.addressMenuIsShow) {
      return
    }
    // 执行显示动画
    that.startAddressAnimation(true)
  },
  // 执行动画
  startAddressAnimation: function (isShow) {
    console.log(isShow)
    var that = this
    // if (isShow) {
    //   // vh是用来表示尺寸的单位,高度全屏是100vh
    //   that.animation.translateY(0 + ‘vh‘).step()
    // } else {
    //   that.animation.translateY(40 + ‘vh‘).step()
    // }
    that.setData({
      //animationAddressMenu: that.animation.export(),
      addressMenuIsShow: isShow,
    })
  },
  // 点击地区选择取消按钮
  cityCancel: function (e) {
    this.startAddressAnimation(false)
  },
  // 点击地区选择确定按钮
  citySure: function (e) {
    var that = this
    var city = that.data.city
    var value = that.data.value
    that.startAddressAnimation(false)
    // 将选择的城市信息显示到输入框
    var areaInfo = that.data.provinces[value[0]].name + ‘,‘ + that.data.citys[value[1]].name + ‘,‘ + that.data.areas[value[2]].name
    that.setData({
      areaInfo: areaInfo,
    })
  },
  // 点击蒙版时取消组件的显示
  hideCitySelected: function (e) {
    console.log(e)
    this.startAddressAnimation(false)
  },
  // 处理省市县联动逻辑
  cityChange: function (e) {
    console.log(e)
    var value = e.detail.value
    var provinces = this.data.provinces
    var citys = this.data.citys
    var areas = this.data.areas
    var provinceNum = value[0]
    var cityNum = value[1]
    var countyNum = value[2]
    // 如果省份选择项和之前不一样,表示滑动了省份,此时市默认是省的第一组数据,
    if (this.data.value[0] != provinceNum) {
      var id = provinces[provinceNum].id
      this.setData({
        value: [provinceNum, 0, 0],
        citys: address.citys[id],
        areas: address.areas[address.citys[id][0].id],
      })
    } else if (this.data.value[1] != cityNum) {
      // 滑动选择了第二项数据,即市,此时区显示省市对应的第一组数据
      var id = citys[cityNum].id
      this.setData({
        value: [provinceNum, cityNum, 0],
        areas: address.areas[citys[cityNum].id],
      })
    } else {
      // 滑动选择了区
      this.setData({
        value: [provinceNum, cityNum, countyNum]
      })
    }
    console.log(this.data)
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

原文地址:https://www.cnblogs.com/wzy0526/p/8311714.html

时间: 2024-11-04 16:05:01

微信小程序之地址联动的相关文章

微信小程序,地址助手

在开发公司公众号的一个模块的时候,用到了微信jssdk的openAddress,然后就去小程序的文档翻了一下,也有. 那么就不客气了.出品一个[地址助手]微信上的地址好帮手.哈哈哈哈,扫小程序嘛,来使用吧.

微信小程序 实现三级联动-省市区

github项目地址   https://github.com/z1511676208/chooseAddr 序:项目中需要用到三级联动,自己试着写了下,也查了一些资料,现在把这个记录一下,里面地区数据,可根据个人需要做一些更改,我比较懒就不改了. wxml <!--index.wxml--> <view class="infoText">{{province}} {{city}} {{county}}</view> <view class=&

WordPress版微信小程序2.2.0版发布

2017年8月12日WordPress版微信小程序2.2.0版通过了微信的审核正式发布,此版本的更新以完善功能为主.主要更新的功能是:站内链接,猜你喜欢,热点文章. WordPress版微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 了解程序的开发历程及开发技术,建议看看相关版本的更新文章: 1.用微信小程序连接WordPress网站 2.WordPress版微信小程序1.5版本发布 3.WordPress版微信小程

从零开始:微信小程序新手入门宝典

为了方便大家了解并入门微信小程序,特将可能会需要的知识,列在这里,让大家方便的从零开始学习 一:微信小程序的特点 张小龙:张小龙全面阐述小程序,推荐通读此文: 小程序是一种不需要下载.安装即可使用的应用,它出现了触手可及的梦想,用户扫一扫或者搜一下即开打开应用,也出现了用完即走的理念,用户不用关心安装太多应用的问题,应用随处可用,但又无须安装卸载.我当时是这样来定义什么是小程序的. 1:无需下载:我们直接使用它,所以无须安装是小程序最基础的一个特性: 2:触手可及:当我们拿着智能手机接触周边的时

新手入门:微信小程序--从入门到精通宝典

<ignore_js_op> 作为新手入门的宝典,我们整理了本论坛各种有价值的内容,并按循序渐进的方式呈现给大家.大家可以按顺序一篇一篇的攻克本帖中的内容,也可以作为字典,跳转至关注的内容去学习.希望大家在这里能快速成长,成为微信小程序开发的顶尖高手. 本帖的内容结构如下:一:小程序之张小龙全面阐述及思维导图:二:微信小程序官方地址三:如何学习微信小程序四:新手入门系列教程集合五:公司开发前必读六:个人开发前必读 一:小程序之张小龙全面阐述及思维导图: 小程序之张小龙全面阐述:于1月9日上线(

WordPress版微信小程序2.2.8版发布

距离上次更新已经一个月了,这期间对WordPress版微信小程序 做的不少小的更新和性能的优化,此次版本更新推出了两个比较重点的功能:点赞和赞赏.同时,优化了文章页面的功能布局,在评论区把常用的功能:转发,复制,点赞,赞赏,都集中在一个操作面板,同时为了不占用文章页面的空间,做了隐藏. WordPress版微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 了解程序的开发历程及开发技术,建议看看相关版本的更新文章: 1.

利用WordPress REST API 开发微信小程序从入门到放弃

自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍然有不少人对一些细节不明白,于是我就想着再写一篇比较全面而基础的教程,主要针对入门级别用户,高手就不用看了. WordPress版“守望轩”微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 至于标题,请原谅我,我标题党了. Word

WordPress版微信小程序2.1.5版发布

WordPress版微信小程序功能已经基本完善,利用这套程序,搭配WordPress提供的rest api,WordPress网站的站长可以快速搭建属于自己的网站微信小程序 . WordPress版微信小程序开放源码地址:https://github.com/iamxjb/winxin-app-watch-life.net 如果你对小程序还不了解,可以先去看看我以前写的wordpress版微信小程序的系列文章: 1.用微信小程序连接WordPress网站2.WordPress版微信小程序1.5版

微信小程序开发备忘

前言 从去年一月份微信宣告要做小程序时的圈子里已经有了局部躁动,去年九月内测时,更是全民热捧,似乎张晓龙和他的微信已经准备好再一次改变世界.还好微信比它的粉丝们要理智的多,不做分发,不搞渠道,不发"红利",所以,昨天正式发布时,也并没有想象中的所有人一起迎接新世界到来的景象.OSC上有人发帖问"微信小程序就要发布了,大家激动吗",底下居然都已经有人开喷了.. 但是,话说回来,从技术角度看,微信为我们提供了基于微信本身的新应用场景下的新技术,那么作为一个开发者,对他有