首頁 >微信小程式 >小程式開發 >小程式之picker 資料是 Object Array

小程式之picker 資料是 Object Array

hzc
hzc轉載
2020-06-16 10:34:133270瀏覽

我們在操作 picker 元件的時候 可能會有疑惑,為什麼會出現渲染問題,或是我就是想取中文的值,怎麼辦?

視圖層

<view>数据是json的,直接展示</view>
picker使用说明:

<picker 
    mode="selector" 
    range-key="valuess" 
    range=&#39;{{school}}&#39; 
    model:value="{{currentSchool}}" 
    bindchange="handleChange"
>
  当前选择 {{school[currentSchool].valuess}}
  
</picker>

邏輯層

page({
    data: {
        school: [
            {"isNewRecord":false,"id":"2","keyss":"school","valuess":"湖南小学"},
            {"isNewRecord":false,"id":"3","keyss":"school","valuess":"北京小学"}
        ],
        currentSchool: ""
    }
    handleChange(e) {
        console.log(e)
        // 如果 range是一个 Object Array形式的,那这里的value就是索引下标
        let currentVal = e.detail.value
    
        // 对应的中文是
        let text = this.data.school[currentVal].valuess
        console.log(&#39;中文-->&#39;, text)
    },
})

這裡,我們傳入的是一個陣列物件Object Array類型, 那我們在使用picker元件的時候,一定要分清,這些欄位的意思,以及如何取值

range-key 是告訴我們,在渲染的時候,是以什麼欄位取值,下面就是不指定的情況,如果是很簡單的資料結構

類似: school: ["中文", '數學', "音樂"]

是不需要指定的,對於複雜的資料結構,指定字段,微信會自動幫我們去賦值

小程式之picker 資料是 Object Array作者:知了清語

model:value="{{currentSchool}}"  你可能會發現這個,為什麼value前面綁定了model

因為微信不是雙向資料綁定的,如果單純的寫 value="{{目前選取的索引下標-currentSchool}}"

邏輯層的currentSchool 是不會有變化的,必須透過bindchange事件去修改data中的資料, 像下面這樣

handleChange(e) {
    this.setData({
       currentSchool: e.detail.value
    })
}

使用model的好處就在於我們不需要關係這個賦值操作,只要我們點擊右上角的確定,data中的currentSchool就更新了,點擊取消是不會更新data中的資料的

小程式之picker 資料是 Object Array

我們在handleChange中的e.detail.value 拿到的值也就是個下標,其實我們可能會想要text文字

就直接像上面那樣,用索引去取來源資料中的{} 物件屬性

還有一個常見的操作,就是將school--schoolFilter變成["湖南小學", "北京小學"] 這個簡單結構,那麼e.detail.value 取得的就是中文

但是這種要求,data中有2個陣列schoolFilter--Array類型的和school--Object Array類型的, picker中用range = "{{schoolFilter}}"

那麼要取得來源資料的其他屬性,就必須遍歷school 再取值

總結

  • #不想去寫bindchange更改data數據,就使用model:

  • #picker 開始標籤和結束標籤中包裹只是選擇以後的內容,你可以隨意去組織用text呈現或{{內容}}呈現 或view 呈現或input 呈現都可以

  • 取得Object Array中的其他字段,如果不想過濾數據,就使用Object Array這種結構,就透過索引下班去訪問,不需要在data中建2個欄位

  • 只有點擊picker中顯示的【確定】按鈕,picker中的資料才會更新

推薦教學:《微信小程式

以上是小程式之picker 資料是 Object Array的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除