最近使用uniapp的uni-data-select组件,发现自定义选项选中后不显示text。分析组件代码发现是:
源码里返回的是rang选中的索引值,而不是选中的value值。而恰巧你的rang里的选项的value不是0,1,2…。那会出现不显示选中的text;
项目代码如下:
因为rang数据由后台赋值,value是后台数据Id。
<view class="cell">
<view class="cellLeft is-required">故障(需求)分类(硬件)</view>
<uni-data-select style="width:65%" v-model="hardwareId"
:localdata="range" @change="change"></uni-data-select>
</view>
data() {
return {
hardwareId:'',
range: [{
value: 10,
text: "AAA"
},
{
value: 20,
text: "BBB"
},
],
}
}
组件源码如下:
下面进行修改:
<view class="uni-select__selector" v-if="showSelector">
<view class="uni-popper__arrow"></view>
<scroll-view scroll-y="true" class="uni-select__selector-scroll">
<view class="uni-select__selector-empty" v-if="mixinDatacomResData.length === 0">
<text>{{emptyTips}}</text>
</view>
<view v-else class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData"
:key="index" @click="change(item,index)">
<text
:class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
</view>
</scroll-view>
</view>
关键点是@click="change(item,index)"
这里返回的是数组rang的索引值。
change(item, index) {
// debugger
if (!item.disable) {
this.showSelector = false
this.current = this.formatItemName(item)
// this.emit(index) 这是原有代码
this.emit(item.value) //修改后
}
},
这里使其返回rang里定义的value值。而不是索引值。
注意:如果你的rang的value值正好是0,1,2…这种,无需修改。