让他们获取同一个值显示在picker时,报提示不能值一样 循环多个picker

uniapp vue 多个picker 用同一个数组和@change事件的bindPickerChange方法,让他们获取同一个值显示在picker时,报提示不能值一样 循环多个picker,但数组和@change事件的bindPickerChange方法都是同一个

根据你的描述,你希望多个Picker共享同一个数组,并且在选择某个值时,其他Picker也应该更新。

在Uni-app中,你可以使用@change事件来监听Picker的选择变化。@change事件在选择改变后触发,你可以在这个事件中更新你的数组。

以下是一个基本的示例:

<template>
  <view>
    <picker v-for="(item, index) in pickers" :key="index" :values="item.values" @change="bindPickerChange(index, $event)">
      <view v-for="value in item.values" :key="value">{{ value }}</view>
    </picker>
  </view>
</template>

<script>
export default {
  data() {
    return {
      pickers: [
        {
          values: ['A', 'B', 'C']
        },
        {
          values: ['D', 'E', 'F']
        },
        // 更多Picker...
      ]
    }
  },
  methods: {
    bindPickerChange(index, event) {
      // 更新pickers数组中的相应Picker的值
      this.pickers[index].values = event.detail;
    }
  }
}
</script>

在这个示例中,每个Picker的values都是pickers数组中的一个元素。当用户选择一个值时,这个值会被更新到对应的values数组中。然后,由于数组是共享的,所以其他Picker也会更新。

注意:由于Picker组件的限制,你不能直接设置Picker的值。你只能通过监听@change事件来间接地改变值。这就是为什么我们在bindPickerChange方法中直接更新了pickers[index].values的原因。

如果您的多个 picker 组件使用的是同一个数组和 @change 事件处理方法,并且您希望它们能够获取相同的值并显示在 picker 上,那么您需要确保每个 picker 组件都有其独立的引用或实例,而不是共享同一个数组和事件处理方法。

您可以通过以下方式实现:

  1. 为每个 picker 组件创建一个独立的数组引用或实例。
// 在组件的 data 中为每个 picker 创建一个独立的数组
data() {
  return {
    picker1Data: [], // 第一个 picker 的数据
    picker2Data: [], // 第二个 picker 的数据
    // ...
  };
},
  1. 为每个 picker 组件创建一个独立的 @change 事件处理方法。
methods: {
  bindPicker1Change(value) {
    // 处理第一个 picker 的 @change 事件
  },
  bindPicker2Change(value) {
    // 处理第二个 picker 的 @change 事件
  },
  // ...
}
  1. 在模板中使用独立的引用和事件处理方法。
<!-- 在模板中为每个 picker 使用独立的引用和事件处理方法 -->
<picker v-model="picker1Data" @change="bindPicker1Change"></picker>
<picker v-model="picker2Data" @change="bindPicker2Change"></picker>
<!-- ... -->

通过以上方式,每个 picker 组件都将具有独立的数组引用和事件处理方法,从而避免出现循环依赖的问题。

【以下回答由 GPT 生成】

问题的主要原因是在循环多个picker组件时,每个picker都使用了同一个值来显示,导致在选择一个picker后,其他picker组件也会更新为相同的值。解决这个问题的方法是给每个picker组件绑定独立的数据。

以下是修改后的代码:

<template>
  <div>
    <div v-for="(item, index) in pickerList" :key="index">
      <picker :value="pickerValue[index]" @change="bindPickerChange(index, $event)"></picker>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      pickerList: ['选项1', '选项2', '选项3'],
      pickerValue: ['选项1', '选项1', '选项1'],
    };
  },
  methods: {
    bindPickerChange(index, e) {
      this.pickerValue[index] = e.target.value;
    },
  },
};
</script>

在修改的代码中,我给每个picker组件绑定了一个单独的value值,这个值在data中定义为一个数组pickerValue,并在初始化时填充为默认值。每个picker组件通过索引index来访问对应的value值,并在change事件触发时更新自己独立的value值。

这样修改后,每个picker组件就能够独立地保存和显示自己的值,避免了显示相同的值的问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^