微信小程序自定義多列選擇器使用
本文實例為大家分享了微信小程序自定義多列選擇器的具體代碼,供大家參考,具體內(nèi)容如下
項目需要,需要實現(xiàn)一個多列選擇器,在用戶確定之前,無論列表如何轉(zhuǎn),都不會影響已確定值的顯示,只要用戶選擇確定才會把新選擇的內(nèi)容更新到已確定的顯示值上。
目前個人思路是保存兩份,一份用來存放用戶選擇的中間值,當用戶點擊確定時,把中間值更新為已確認值。如果用戶選擇取消,就把中間值更新為已確認值。
因為微信小程序中的多列選擇器是用數(shù)組存放數(shù)據(jù),因此在拷貝中涉及到深拷貝,必須是深拷貝才能實現(xiàn)上面的設(shè)想。
因此可以下面代碼實現(xiàn)深拷貝:
var arr=JSON.parse(JSON.stringify(this.data.multiArray));
wxml:
<picker bindcancel="cancelAddr" mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{demoIndex}}" range="{{demoArray}}"> ? ? ? ? ? ? <view class="picker"> ? ? ? ? ? ? ? ? 收貨地址:{{multiArray[0][multiIndex[0]]}}-{{multiArray[1][multiIndex[1]]}}-{{multiArray[2][multiIndex[2]]}} ? ? ? ? ? ? </view> ? ? ? ? </picker>
js:
data:{ ??? ?multiArray: [ ? ? ? ['廣大生活區(qū)', '廣大教學區(qū)'], ? ? ? ['B1', 'B2', 'B3'], ? ? ? ['一樓', '二樓', '三樓'] ? ? ], ? ? demoArray: ?[ ? ? ? ['廣大生活區(qū)', '廣大教學區(qū)'], ? ? ? ['B1', 'B2', 'B3'], ? ? ? ['一樓', '二樓', '三樓'] ? ? ], ? ? //實際顯示值 ? ? multiIndex: [0, 0, 0], ? ? //臨時變量 ? ? demoIndex: [0, 0, 0], ? ? teach: ["文清樓", "文新樓", "文俊西樓"], ? ? life: ['B1', 'B2', 'B3'] ? ? } //修改過程中取消修改 ? cancelAddr() { ? ? var arr = JSON.parse(JSON.stringify(this.data.multiArray)); ? ? var index = JSON.parse(JSON.stringify(this.data.multiIndex)); ? ? this.setData({ ? ? ? demoArray: arr, ? ? ? demoIndex: index ? ? }) ? }, ? //地址選擇器改變 ? bindMultiPickerColumnChange(e) { ? ? var value = e.detail.value; ? ? var column = e.detail.column; ? ? var demoArray = this.data.demoArray; ? ? var demoIndex = this.data.demoIndex; ? ? if (column === 0 && value != demoIndex[0]) { ? ? ? if (value === 0) { ? ? ? ? demoArray[1] = this.data.life; ? ? ? } else { ? ? ? ? demoArray[1] = this.data.teach; ? ? ? } ? ? } ? ? demoIndex[column] = value; ? ? this.setData({ ? ? ? demoArray: demoArray, ? ? ? demoIndex: demoIndex ? ? }) ? }, ? //確定選中的地址 ? bindMultiPickerChange() { ? ? console.log("all change"); ? ? var arr = JSON.parse(JSON.stringify(this.data.demoArray)); ? ? var index = JSON.parse(JSON.stringify(this.data.demoIndex)); ? ? this.setData({ ? ? ? multiArray: arr, ? ? ? multiIndex: index ? ? }) ? },
效果圖(上面代碼的數(shù)據(jù)數(shù)量刪除了部分):
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript將字符串轉(zhuǎn)換為整數(shù)的方法
這篇文章主要介紹了JavaScript將字符串轉(zhuǎn)換為整數(shù)的方法,涉及javascript中parseInt函數(shù)的使用技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04JavaScript常用代碼書寫規(guī)范的超全面總結(jié)
這篇文章給大家全面總結(jié)了JavaScript常用代碼的書寫規(guī)范,分別利用推薦和不推薦的兩種示例代碼讓大家更能直接的了解書寫規(guī)范,其實關(guān)于javascript代碼規(guī)范我們應該遵循古老的原則:“能做并不意味著應該做”,好了,下面我們就來一起看看吧。2016-09-09MATLAB中fillmissing函數(shù)用法小結(jié)
這篇文章主要介紹了MATLAB中fillmissing函數(shù)用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09淺談javascript中執(zhí)行環(huán)境(作用域)與作用域鏈
本文主要介紹了javascript中執(zhí)行環(huán)境(作用域)與作用域鏈,并在文章結(jié)尾處做出了總結(jié),感興趣的朋友可以看下2016-12-12