小程序四級聯(lián)動(wepy)

由于 github 上沒有基于wepy的4級聯(lián)動組件,基本上都是原生小程序的寫法蜈缤,我自己改寫成了基于wepy的四級聯(lián)動組件坞古。目的是幫助使用wepy的朋友節(jié)省一些時(shí)間,畢竟我自己沒有找到wepy版本的四級聯(lián)動組件。下面的代碼直接復(fù)制到wepy項(xiàng)目中運(yùn)行即可劫樟,代碼邏輯很簡單,看一下注釋基本就理解了织堂,我就不啰嗦了叠艳。

    <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() // 頁面加載后就調(diào)用函數(shù) 獲取省級數(shù)據(jù)
    };
    data = {
        provinceArr: null, //省名稱數(shù)組
        provinceList: null, //省數(shù)組
        currnetProvinceKey: 0, //當(dāng)前省下標(biāo)
        cityArr: null, //城市名稱數(shù)組
        cityList: null, //城市數(shù)組
        currnetCityKey: 0, //當(dāng)前城市下標(biāo)
        storeArr: null, //
        storeList: null, //
        currnetStoreKey: 0,
        streetArr: null, //
        streetList: null, //
        multiArray: [], // 三維數(shù)組數(shù)據(jù)
        multiIndex: [0, 0, 0, 0], // 默認(rèn)的下標(biāo)
        step: 0, // 默認(rèn)顯示請選擇
    }
    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 // 放在一個(gè)數(shù)組里面
        var provinceArr = data.map((item) => {
            return item.value
        }) // 獲取數(shù)據(jù)里面的value值,就是只用數(shù)據(jù)的名稱 
        this.multiArray = [provinceArr, [],
            []
        ] // 更新三維數(shù)組 更新后長這樣 [['江蘇省', '福建省'],[],[]]
        this.provinceList = provinceList // 省級原始數(shù)據(jù)
        this.provinceArr = provinceArr // 省級所有的名稱
        var defaultCode = this.provinceList[0].key // 使用第一項(xiàng)當(dāng)作參數(shù)獲取市級數(shù)據(jù)
        if (defaultCode) {
            this.currnetProvinceKey = defaultCode // 保存在當(dāng)前的省級key
            this.getCity(defaultCode) // 獲取市級數(shù)據(jù)
        }
    }
    getCity(code) { // 獲取市級數(shù)據(jù)
        this.currnetProvinceKey = code // 保存當(dāng)前選擇的市級code
        //用code去請求
        let data = [{
                key: '3200',
                value: '市區(qū)1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '市區(qū)2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '市區(qū)3',
                selected: null,
                exKey: null,
                unionField: null,
            }
        ]
        var cityArr = data.map((item) => {
            return item.value
        })
        var cityList = data
        this.multiArray = [this.provinceArr, this.cityArr, []] // 更新三維數(shù)組 更新后長這樣 [['江蘇省', '福建省'], ['徐州市'], []]
        this.cityList = cityList // 保存下市級原始數(shù)據(jù)
        this.cityArr = cityArr // 市級所有的名稱
        var defaultCode = cityList[0].key // 用第一個(gè)獲取市數(shù)據(jù)
        if (defaultCode) {
            this.currnetCityKey = defaultCode // 存下當(dāng)前選擇的城市key
            this.getStore(defaultCode) // 獲取市數(shù)據(jù)
        }
    }
    getStore(code) {
        this.currnetCityKey = code // 更新當(dāng)前選擇的市級key
        let data = [{
                key: '3200',
                value: '南山區(qū)1',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '3200',
                value: '南山區(qū)2',
                selected: null,
                exKey: null,
                unionField: null,
            },
            {
                key: '32003',
                value: '南山區(qū)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 // 存下當(dāng)前選擇的城市key
            this.street(defaultCode) 
        }
    }
    street(code) {
        this.currnetStoreKey = code // 更新當(dāng)前選擇的市級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) { // 滾動選擇器 觸發(fā)的事件
        var column = e.detail.column // 當(dāng)前改變的列
        var data = {
            multiIndex: JSON.parse(JSON.stringify(this.multiIndex)),
            multiArray: JSON.parse(JSON.stringify(this.multiArray))
        }
        this.multiIndex[column] = e.detail.value; // 第幾列改變了就是對應(yīng)multiIndex的第幾個(gè)易阳,更新它
        switch (column) { // 處理不同的邏輯
            case 0: // 第一列更改 就是省級的更改
                var currentProvinceKey = this.provinceList[e.detail.value].key
                if (currentProvinceKey != this.currnetProvinceKey) { // 判斷當(dāng)前的key是不是真正的更新了
                    this.getCity(currentProvinceKey) // 獲取當(dāng)前key下面的市級數(shù)據(jù)
                }
                this.multiIndex[1] = 0 // 將市默認(rèn)選擇第一個(gè)
                break;
            case 1: // 市發(fā)生變化
                var currentCitykey = this.cityList[e.detail.value].key
                if (currentCitykey != this.currnetCityKey) { 
                    this.getStore(currentCitykey)
                }
                data.multiIndex[2] = 0
                break;
        }
        this.setData(data) // 更新數(shù)據(jù)
    }
    pickchange(e) {
        this.step = 1, 
            this.multiIndex = e.detail.value // 更新下標(biāo)字段
    }
    submit() { 
        var storeCode = this.storeList[this.multiIndex.length - 1].key
    }
    events = {};
    async onShow() {};
}
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末附较,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子潦俺,更是在濱河造成了極大的恐慌拒课,老刑警劉巖徐勃,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異早像,居然都是意外死亡僻肖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門卢鹦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臀脏,“玉大人,你說我怎么就攤上這事冀自∪嘀桑” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵熬粗,是天一觀的道長搀玖。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任龄糊,我火速辦了婚禮所刀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蠢护。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布关带。 她就那樣靜靜地躺著,像睡著了一般沼撕。 火紅的嫁衣襯著肌膚如雪宋雏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天务豺,我揣著相機(jī)與錄音磨总,去河邊找鬼。 笑死笼沥,一個(gè)胖子當(dāng)著我的面吹牛蚪燕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奔浅,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼馆纳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了汹桦?” 一聲冷哼從身側(cè)響起鲁驶,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舞骆,沒想到半個(gè)月后钥弯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體径荔,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年脆霎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了总处。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绪穆,死狀恐怖辨泳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玖院,我是刑警寧澤菠红,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站难菌,受9級特大地震影響试溯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜郊酒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一遇绞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧燎窘,春花似錦摹闽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蚜迅,卻和暖如春舵匾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谁不。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工坐梯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刹帕。 一個(gè)月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓吵血,卻偏偏與公主長得像,于是被迫代替她去往敵國和親偷溺。 傳聞我的和親對象是個(gè)殘疾皇子蹋辅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容