在Vue中,使用Treeselect組件來(lái)創(chuàng)建可搜索的下拉樹形菜單選項(xiàng)是非常方便的。Treeselect組件有很多的配置選項(xiàng)可以幫助你實(shí)現(xiàn)各種功能,其中最重要的一個(gè)選項(xiàng)就是loadOptions。
loadOptions: function({ callback, searchQuery }) { // 這里可以進(jìn)行異步加載選項(xiàng)的操作 // 選項(xiàng)加載完成后,調(diào)用callback方法,將加載的選項(xiàng)傳遞給Treeselect組件 callback([ {id: 1, label: '選項(xiàng)1'}, {id: 2, label: '選項(xiàng)2'}, ... ]) }
loadOptions選項(xiàng)是一個(gè)函數(shù),它會(huì)在Treeselect組件加載時(shí)被調(diào)用。當(dāng)你需要異步加載選項(xiàng)時(shí),可以在這個(gè)函數(shù)中進(jìn)行相關(guān)的操作。在這個(gè)函數(shù)中,你可以使用Vue-resource、Axios或者原生的XMLHttpRequest等方法來(lái)進(jìn)行異步請(qǐng)求。請(qǐng)求返回后,你必須將加載的選項(xiàng)傳遞給callback方法。callback方法接收一個(gè)參數(shù),這個(gè)參數(shù)就是你加載的選項(xiàng)數(shù)據(jù),必須是一個(gè)數(shù)組類型,其中每個(gè)元素都必須是一個(gè)包含了id和label屬性的對(duì)象。
下面是一個(gè)使用Axios來(lái)進(jìn)行選項(xiàng)加載的例子:
loadOptions: function({ callback, searchQuery }) { axios.get('/api/options', { params: { search: searchQuery } }).then(response =>{ callback(response.data) }) }
上面的代碼中,我們使用Axios來(lái)向服務(wù)器發(fā)送請(qǐng)求,同時(shí)將用戶輸入的搜索關(guān)鍵字作為請(qǐng)求的參數(shù)。請(qǐng)求完成后,我們將返回的選項(xiàng)數(shù)據(jù)傳遞給callback方法,Treeselect組件就會(huì)將這些選項(xiàng)數(shù)據(jù)顯示在下拉菜單中。
當(dāng)你需要實(shí)現(xiàn)懶加載選項(xiàng)時(shí),loadOptions選項(xiàng)可以提供一個(gè)額外的參數(shù),這個(gè)參數(shù)就是父級(jí)選項(xiàng)節(jié)點(diǎn)的id信息。這個(gè)參數(shù)的名稱是parentNode,它的值是一個(gè)對(duì)象,包含了父級(jí)選項(xiàng)的id和label信息。使用這個(gè)參數(shù),你可以根據(jù)父級(jí)選項(xiàng)的id來(lái)加載子級(jí)選項(xiàng)。
loadOptions: function({ parentNode, callback }) { axios.get('/api/options', { params: { parent: parentNode.id } }).then(response =>{ callback(response.data) }) }
上面的代碼中,我們首先檢查parentNode參數(shù)是否存在,如果存在,說(shuō)明當(dāng)前正在加載子級(jí)選項(xiàng)。我們向服務(wù)器發(fā)送了一個(gè)請(qǐng)求,并傳遞了parentNode.id作為請(qǐng)求的參數(shù),服務(wù)器將會(huì)根據(jù)這個(gè)參數(shù)返回子級(jí)選項(xiàng)的數(shù)據(jù)。當(dāng)子級(jí)選項(xiàng)加載完成后,我們將數(shù)據(jù)傳遞給callback方法即可。
最后要注意的是,loadOptions選項(xiàng)必須返回一個(gè)Promise對(duì)象或者異步函數(shù)。如果你忘記返回這些對(duì)象,Treeselect組件將無(wú)法正確加載選項(xiàng)。