github连接:https://github.com/UFO0001/wechat-three-level
//index.js
//获取应用实例
var tcity = require("../../utils/citys.js");
var app = getApp()
Page({
data: {
provinces: [],
province: "",
citys: [],
city: "",
countys: [],
county: '',
value: [0, 0, 0],
values: [0, 0, 0],
condition: false
},
bindChange: function(e) {
var val = e.detail.value
var t = this.data.values;
var cityData = this.data.cityData;
if(val[0] != t[0]){
console.log('province');
const citys = [];
const countys = [];
for (let i = 0 ; i < cityData[val[0]].sub.length; i++) {
citys.push(cityData[val[0]].sub[i].name)
}
for (let i = 0 ; i < cityData[val[0]].sub[0].sub.length; i++) {
countys.push(cityData[val[0]].sub[0].sub[i].name)
}
this.setData({
province: this.data.provinces[val[0]],
city: cityData[val[0]].sub[0].name,
citys:citys,
county: cityData[val[0]].sub[0].sub[0].name,
countys:countys,
values: val,
value:[val[0],0,0]
})
return;
}
if(val[1] != t[1]){
console.log('city');
const countys = [];
for (let i = 0 ; i < cityData[val[0]].sub[val[1]].sub.length; i++) {
countys.push(cityData[val[0]].sub[val[1]].sub[i].name)
}
this.setData({
city: this.data.citys[val[1]],
county: cityData[val[0]].sub[val[1]].sub[0].name,
countys:countys,
values: val,
value:[val[0],val[1],0]
})
return;
}
if(val[2] != t[2]){
console.log('county');
this.setData({
county: this.data.countys[val[2]],
values: val
})
return;
}
},
open:function(){
this.setData({
condition:!this.data.condition
})
},
onLoad: function () {
console.log("onLoad");
var that = this;
tcity.init(that);
var cityData = that.data.cityData;
const provinces = [];
const citys = [];
const countys = [];
for(let i=0;i<cityData.length;i++){
provinces.push(cityData[i].name);
}
console.log('省份完成');
for (let i = 0 ; i < cityData[0].sub.length; i++) {
citys.push(cityData[0].sub[i].name)
}
console.log('城市完成');
for (let i = 0 ; i < cityData[0].sub[0].sub.length; i++) {
countys.push(cityData[0].sub[0].sub[i].name)
}
that.setData({
'provinces': provinces,
'citys':citys,
'countys':countys,
'province':cityData[0].name,
'city':cityData[0].sub[0].name,
'county':cityData[0].sub[0].sub[0].name
})
console.log('初始化完成');
}
})
<!--index.wxml-->
<view class="container">
<view class="input">
<input placeholder="选择地址" value="{{province}}-{{city}}-{{county}}" focus="{{focus}}" bindfocus="open" />
</view>
</view>
<view wx:if="{{condition}}" class="citypicker">
<picker-view indicator-style="height: 50px;" style="width: 100%; height: 300px;" value="{{value}}" bindchange="bindChange" class="citybody">
<view class="cityheader">
<view bindtap="open" class="city-cancel">取消</view>
<view bindtap="open" class="city-true">确定</view>
</view>
<picker-view-column>
<view wx:for="{{provinces}}" wx:key="item" style="line-height: 50px;padding-left:10px;">{{item}}</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{citys}}" wx:key="item" style="line-height: 50px;padding-left:10px;">{{item}}</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{{countys}}" wx:key="item" style="line-height: 50px;padding-left:10px;">{{item}}</view>
</picker-view-column>
</picker-view>
</view>
.input {
padding-top: 450rpx;
width: 100%;
}
.input input {
width: 100%;
background-color: #fff;
border-bottom: 1px #d9d9d9 solid;
border-top: 1px #d9d9d9 solid;
padding: 20rpx 50rpx;
}
.citypickers{
position: fixed;
height: 100%;
width: 100%;
min-height: 100%;
background-color: #ff0;
}
.citybody {
position: fixed;
bottom: 0px;
}
.cityheader {
position: absolute;
top:0px;
width: 100%;
z-index: 5;
}
.city-cancel {
float: left;
margin: 20rpx;
color: #828282;
}
.city-true {
float: right;
margin: 20rpx;
color: #10FF10;
}
.section .picker {
background-color: #fff;
border-bottom: 2px #cccccc solid;
border-top: 2px #d9d9d9 solid;
padding: 20rpx;
}