uni-app 下拉框有类似组件可以自定义options吗

发布于 1周前 作者 vueper 来自 Uni-App

uni-app 下拉框有类似组件可以自定义options吗

2 回复

在 uni-app 中,虽然默认的下拉框组件(picker)不支持直接自定义选项的视图,但你可以通过一些变通的方法实现自定义选项的功能。通常,我们可以结合 picker-viewpicker-view-column 组件来实现高度自定义的下拉选择功能。

以下是一个使用 picker-viewpicker-view-column 实现自定义选项的示例代码:

<template>
  <view class="container">
    <view class="custom-picker">
      <view class="picker-item" @click="showPicker = true">{{selectedValue}}</view>
      <picker-view v-if="showPicker" :value="pickerValue" @change="onPickerChange" style="width: 100%; height: 300px;">
        <picker-view-column>
          <view v-for="(item, index) in options" :key="index" class="picker-item" :style="{backgroundColor: selectedIndex === index ? '#f8f8f8' : '#fff'}">
            <!-- 自定义选项内容 -->
            <image v-if="item.type === 'image'" :src="item.src" style="width: 100%; height: 100px;"></image>
            <text v-else>{{item.text}}</text>
          </view>
        </picker-view-column>
      </picker-view>
    </view>
    <view class="mask" v-if="showPicker" @click="showPicker = false"></view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      showPicker: false,
      pickerValue: [0],
      selectedIndex: 0,
      selectedValue: '',
      options: [
        { text: 'Option 1' },
        { text: 'Option 2' },
        { type: 'image', src: '/static/image1.png' },
        { text: 'Option 4' }
      ]
    };
  },
  mounted() {
    this.selectedValue = this.options[this.pickerValue[0]].text || ''; // 初始化显示值
  },
  methods: {
    onPickerChange(e) {
      const index = e.detail.value[0];
      this.pickerValue = [index];
      this.selectedIndex = index;
      this.selectedValue = this.options[index].text || ''; // 更新显示值,如果是图片则不显示文本
      this.showPicker = false; // 关闭选择器
    }
  }
};
</script>

<style>
.container {
  position: relative;
}
.custom-picker {
  position: relative;
  z-index: 1;
}
.mask {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background-color: rgba(0, 0, 0, 0.5);
  z-index: 0;
}
.picker-item {
  padding: 10px;
  border: 1px solid #ddd;
}
</style>

在这个示例中,我们通过 picker-viewpicker-view-column 组件创建了一个自定义选项的下拉选择组件。每个选项可以是文本或图片,通过 v-ifv-else 进行条件渲染。当用户点击选择框时,会显示 picker-view,并在选项改变时更新显示的值并关闭选择器。

回到顶部