溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

小程序中實(shí)現(xiàn)三級(jí)選擇器組件的案例

發(fā)布時(shí)間:2020-12-21 13:59:37 來(lái)源:億速云 閱讀:209 作者:小新 欄目:移動(dòng)開發(fā)

這篇文章給大家分享的是有關(guān)小程序中實(shí)現(xiàn)三級(jí)選擇器組件的案例的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧。

效果

小程序中實(shí)現(xiàn)三級(jí)選擇器組件的案例

實(shí)現(xiàn)過程

undefined

<view class="section">
    <view class="section__title">{{title}}</view>
    <picker bindchange="bindPickerChange" value="{{multiIndex}}" range="{{multiArray}}" mode="multiSelector" bindcolumnchange="columnchange">
      <view class="picker">  
      <view class='words'>
        <!-- {{multiArray[2][multiIndex[2]]}} -->
        {{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}      </view>
      <image src='/image/right.png'></image>  
    </view> 
    </picker>
  </view>

在小程序已有的picker組件中設(shè)置mode="multiSelector",使之成為多列選擇器。

在多列選擇器中有兩個(gè)重要的參數(shù):

properties: {
    multiArray: Array,
    multiIndex: Array
  }

multiArray是一個(gè)二維數(shù)組,存放選擇器每一列上的選項(xiàng)列表。multiIndex是一個(gè)一維數(shù)組,存放每一列被選中的值,例:[0,0,0] 表示第一列選中了第0個(gè)選項(xiàng),第二列也選中了第0個(gè)選項(xiàng),以此類推。這兩個(gè)參數(shù)都由用到三列選擇器的頁(yè)面?zhèn)魅搿?/p>

在小程序已有的picker組件中綁定bindPickerChange事件和columnchange事件,當(dāng)用戶確定選擇器的選項(xiàng)值或改變某列選項(xiàng)值時(shí)會(huì)分別觸發(fā)這兩個(gè)事件:

methods: {    //這個(gè)只有在點(diǎn)確定的時(shí)候才會(huì)觸發(fā)
    bindPickerChange: function (e) {
      this.triggerEvent("multiSelectorValue", e.detail)// 更新下標(biāo)字段
      multiIndex,event.detail = {value: value}
    },
    columnchange: function (e) {
      this.triggerEvent("multiSelectorColumn", e.detail)// detail包含當(dāng)前改變的列和改變的列的數(shù)值,event.detail = {column: column, value: value}
    }
  }

設(shè)置multiSelectorValue事件和multiSelectorColumn事件,來(lái)讓用到三列選擇器的頁(yè)面捕捉到選擇器選項(xiàng)值的改變。

在要用到三列選擇器的頁(yè)面里引入三列選擇器組件,比如叫v-picker-multiSelector:

<v-picker-multiSelector multiArray="{{multiArray}}" multiIndex="{{multiIndex}}"  
bind:multiSelectorValue="receiveMultiSelectorValue" bind:multiSelectorColumn="receiveMultiSelectorColumn">
</v-picker-multiSelector>

通過設(shè)置receiveMultiSelectorValue函數(shù)和receiveMultiSelectorColumn函數(shù)來(lái)接收選項(xiàng)值的變化:

//當(dāng)用戶改變種植區(qū)某列選項(xiàng)時(shí)觸發(fā)的事件
receiveMultiSelectorColumn: 
function (e) {
  const column = e.detail.column  
  const columnValue = e.detail.value  
  switch (column) {    
  case 0:      
  this.data.multiIndex[0] = columnValue //更新省值

      this.data.multiArray[1] = this.testGetCity(this.data.provinceList[columnValue]) //獲取市列表
      this.data.cityList = this.data.multiArray[1] //更新市列表
      this.data.multiIndex[1] = 0 // 將市默認(rèn)選擇第一個(gè)

      this.data.multiArray[2] = this.testGetPlantingArea(this.data.cityList[0]) //獲取區(qū)列表
      this.data.plantingAreaList = this.data.multiArray[2] //更新種植區(qū)列表
      this.data.multiIndex[2] = 0 // 將區(qū)默認(rèn)選擇第一個(gè)

      this.setData({
        multiArray: this.data.multiArray,
        multiIndex: this.data.multiIndex
      })      break

    case 1:      this.data.multiIndex[1] = columnValue //更新市值

      //this.data.multiArray[2] = this.getPlantingArea(this.data.cityList[columnValue])//獲取區(qū)列表
      this.data.multiArray[2] = this.testGetPlantingArea(this.data.cityList[columnValue]) //測(cè)試用,獲取區(qū)列表
      this.data.plantingAreaList = this.data.multiArray[2] //更新種植區(qū)列表
      this.data.multiIndex[2] = 0 // 將區(qū)默認(rèn)選擇第一個(gè)

      this.setData({
        multiArray: this.data.multiArray,
        multiIndex: this.data.multiIndex
      })      break
  }
}

當(dāng)三列選擇器的某列值改變時(shí),頁(yè)面從組件里接收到改變的列數(shù)(column)和該列被選擇的值(columnValue)。對(duì)column進(jìn)行判斷,如果column=0,那么根據(jù)columnValue的值向后端請(qǐng)求回該省的市列表,并根據(jù)市列表的的第一位向后端請(qǐng)求回該市的區(qū)列表。如果column=1,那么那么根據(jù)columnValue的值向后端請(qǐng)求回該市的區(qū)列表。

receiveMultiSelectorValue: function (e) {
      this.setData({
        multiIndex: e.detail.value
      })      this.data.region[0] = this.data.multiArray[0][this.data.multiIndex[0]]      
      this.data.region[1] = this.data.multiArray[1][this.data.multiIndex[1]]      
      this.data.region[2] = this.data.multiArray[2][this.data.multiIndex[2]]      
      this.setData({
        region: this.data.region
      })      //console.log(this.data.region)
    }

當(dāng)用戶確定三列選擇器的選項(xiàng)時(shí),頁(yè)面從組件中接收到multiIndex的值,并對(duì)選項(xiàng)值進(jìn)行更新。

感謝各位的閱讀!關(guān)于小程序中實(shí)現(xiàn)三級(jí)選擇器組件的案例就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI