小程序四级联动(wepy)

简介: 由于 github 上没有基于wepy的4级联动组件,基本上都是原生小程序的写法,我自己改写成了基于wepy的四级联动组件。目的是帮助使用wepy的朋友节省一些时间,毕竟我自己没有找到wepy版本的四级联动组件。

由于 github 上没有基于wepy的4级联动组件,基本上都是原生小程序的写法,我自己改写成了基于wepy的四级联动组件。目的是帮助使用wepy的朋友节省一些时间,毕竟我自己没有找到wepy版本的四级联动组件。下面的代码直接复制到wepy项目中运行即可,代码逻辑很简单,看一下注释基本就理解了,我就不啰嗦了。

    <template>
<picker mode="multiSelector" range="{{multiArray}}" bindcolumnchange="columnchange" value="{{multiIndex}}" bindchange='pickchange'>
    <!-- <view class='right' wx:if="{{multiArray[2][multiIndex[2]] && step == 0}}"> -->
    <view class='right'>
        <text>请选择</text>
    </view>
    <!-- <view class="picker" wx:if="{{multiArray[2][multiIndex[2]] && step == 1}}"> -->
    <view class="picker">
        <text>{{multiArray[0][multiIndex[0]]}} {{multiArray[1][multiIndex[1]]}} {{multiArray[2][multiIndex[2]]}}{{multiArray[3][multiIndex[3]]}}</text>
    </view>
</picker>
    </template>

    <script>
var app = getApp()
import wepy from 'wepy';
import tip from '@/utils/tips';
import city from '@/utils/city';
import api from '@/utils/api';
import {
    goUrl
} from '@/utils/global';
export default class Index extends wepy.page {
    methods = {}
    async onLoad() {
        this.getProvince() // 页面加载后就调用函数 获取省级数据
    };
    data = {
        provinceArr: null, //省名称数组
        provinceList: null, //省数组
        currnetProvinceKey: 0, //当前省下标
        cityArr: null, //城市名称数组
        cityList: null, //城市数组
        currnetCityKey: 0, //当前城市下标
        storeArr: null, //
        storeList: null, //
        currnetStoreKey: 0,
        streetArr: null, //
        streetList: null, //
        multiArray: [], // 三维数组数据
        multiIndex: [0, 0, 0, 0], // 默认的下标
        step: 0, // 默认显示请选择
    }
    getProvince() { // 获取省
        //ajax请求
        let data = [{
                key: '3200',
                value: '江苏',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '江苏2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '江苏',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var provinceList = data // 放在一个数组里面
        var provinceArr = data.map((item) => {
            return item.value
        }) // 获取数据里面的value值,就是只用数据的名称 
        this.multiArray = [provinceArr, [],
            []
        ] // 更新三维数组 更新后长这样 [['江苏省', '福建省'],[],[]]
        this.provinceList = provinceList // 省级原始数据
        this.provinceArr = provinceArr // 省级所有的名称
        var defaultCode = this.provinceList[0].key // 使用第一项当作参数获取市级数据
        if (defaultCode) {
            this.currnetProvinceKey = defaultCode // 保存在当前的省级key
            this.getCity(defaultCode) // 获取市级数据
        }
    }
    getCity(code) { // 获取市级数据
        this.currnetProvinceKey = code // 保存当前选择的市级code
        //用code去请求
        let data = [{
                key: '3200',
                value: '市区1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '市区2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '市区3',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var cityArr = data.map((item) => {
            return item.value
        })
        var cityList = data
        this.multiArray = [this.provinceArr, this.cityArr, []] // 更新三维数组 更新后长这样 [['江苏省', '福建省'], ['徐州市'], []]
        this.cityList = cityList // 保存下市级原始数据
        this.cityArr = cityArr // 市级所有的名称
        var defaultCode = cityList[0].key // 用第一个获取市数据
        if (defaultCode) {
            this.currnetCityKey = defaultCode // 存下当前选择的城市key
            this.getStore(defaultCode) // 获取市数据
        }
    }
    getStore(code) {
        this.currnetCityKey = code // 更新当前选择的市级key
        let data = [{
                key: '3200',
                value: '南山区1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '南山区2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '南山区1',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var storeList = data
        var storeArr = data.map((item) => {
            return item.value
        })
        this.multiArray = [this.provinceArr, this.cityArr, storeArr] 
        this.storeList = storeList 
        this.storeArr = storeArr 
        var defaultCode = storeList[0].key 
        if (defaultCode) {
            this.currnetStoreKey = defaultCode // 存下当前选择的城市key
            this.street(defaultCode) 
        }
    }
    street(code) {
        this.currnetStoreKey = code // 更新当前选择的市级key
        let data = [{
                key: '3200',
                value: '街道1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '街道2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '街道3',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var streetList = data
        var streetArr = data.map((item) => {
            return item.value
        })
        this.multiArray = [this.provinceArr, this.cityArr, this.storeArr, streetArr] 
        this.streetList = streetList 
        this.streetArr = streetArr 
    }
    columnchange(e) { // 滚动选择器 触发的事件
        var column = e.detail.column // 当前改变的列
        var data = {
            multiIndex: JSON.parse(JSON.stringify(this.multiIndex)),
            multiArray: JSON.parse(JSON.stringify(this.multiArray))
        }
        this.multiIndex[column] = e.detail.value; // 第几列改变了就是对应multiIndex的第几个,更新它
        switch (column) { // 处理不同的逻辑
            case 0: // 第一列更改 就是省级的更改
                var currentProvinceKey = this.provinceList[e.detail.value].key
                if (currentProvinceKey != this.currnetProvinceKey) { // 判断当前的key是不是真正的更新了
                    this.getCity(currentProvinceKey) // 获取当前key下面的市级数据
                }
                this.multiIndex[1] = 0 // 将市默认选择第一个
                break;
            case 1: // 市发生变化
                var currentCitykey = this.cityList[e.detail.value].key
                if (currentCitykey != this.currnetCityKey) { 
                    this.getStore(currentCitykey)
                }
                data.multiIndex[2] = 0
                break;
        }
        this.setData(data) // 更新数据
    }
    pickchange(e) {
        this.step = 1, 
            this.multiIndex = e.detail.value // 更新下标字段
    }
    submit() { 
        var storeCode = this.storeList[this.multiIndex.length - 1].key
    }
    events = {};
    async onShow() {};
}
</script>
相关文章
|
小程序 JavaScript 开发者
微信小程序wepy框架入门教程-底部导航栏效果(五)
微信小程序wepy框架入门教程-底部导航栏效果(五)
156 0
|
小程序
小程序wepy踩坑-Cannot find module 'D:\node_modules\npm\bin\npm-cli.js'
小程序wepy踩坑-Cannot find module 'D:\node_modules\npm\bin\npm-cli.js'
224 0
|
小程序
微信小程序wepy框架入门教程 - 安装less/sass(四)
微信小程序wepy框架入门教程 - 安装less/sass(四)
215 0
|
小程序 开发者
微信小程序wepy框架入门教程-向左滑动删除效果(三)
微信小程序wepy框架入门教程-向左滑动删除效果(三)
194 0
|
小程序 前端开发 开发工具
微信小程序wepy框架入门教程-查看并运行wepy源码(二)
微信小程序wepy框架入门教程-查看并运行wepy源码(二)
135 0
|
开发框架 小程序 JavaScript
微信小程序wepy框架入门教程-搭建开发环境(一)
微信小程序wepy框架入门教程-搭建开发环境(一)
245 0
|
小程序 JavaScript 前端开发
小程序第三方框架对比 (mpvue、wepy、taro)2
小程序第三方框架对比 (mpvue、wepy、taro)
|
移动开发 小程序 JavaScript
小程序第三方框架对比 (mpvue、wepy、taro)1
小程序第三方框架对比 (mpvue、wepy、taro)
|
小程序 开发者
微信小程序中如何实现省市区街道四级地址级联选择
微信小程序中如何实现省市区街道四级地址级联选择
2134 0
微信小程序中如何实现省市区街道四级地址级联选择
CHB
|
前端开发 JavaScript API
小程序开发:用原生还是选框架(wepy/mpvue/taro/uni-app)-- 第1季
uni-app团队,针对每个小程序开发框架的最新升级版本,每季度发布一次实时、深度的评测报告,给开发者提供选型参考
CHB
4478 0