uni-app鸿蒙下picker-view的@change事件不触发

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

uni-app鸿蒙下picker-view的@change事件不触发

代码示例

<picker-view :indicator-style="indicatorStyle" :value="selectedValue" [@change](/user/change)="wrapperChange">
  <picker-view-column :style="pvcStyle">
    <view class="g-dp-ctt-wp-item" v-for="(item,index) in years" :key="index">{{item}}年</view>
  </picker-view-column>
  <picker-view-column :style="pvcStyle">
    <view class="g-dp-ctt-wp-item" v-for="(item,index) in months" :key="index">{{dateFormate(item)}}月</view>
  </picker-view-column>
  <picker-view-column :style="pvcStyle">
    <view class="g-dp-ctt-wp-item" v-for="(item,index) in days" :key="index">{{dateFormate(item)}}日</view>
  </picker-view-column>
</picker-view>

问题描述

picker-view-column 如果是三个以下的话无法触发 change 事件,如果是三个以上的话会滚动前面的选项会触发,但是滚到最后一项也不会触发,就是说永远取不到最后一个选项。


更多关于uni-app鸿蒙下picker-view的@change事件不触发的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

你好,经过测试,没有复现你说的问题,你使用的是哪个版本?或者是你能够提供一下更完整的代码吗?

更多关于uni-app鸿蒙下picker-view的@change事件不触发的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


版本是4.43.2024122419-alpha

在uni-app中,如果你在鸿蒙系统上遇到picker-view组件的@change事件不触发的问题,可能是由于系统兼容性问题或者组件使用不当导致的。下面是一个标准的picker-view组件使用示例,以及如何在其中监听@change事件的代码示例。你可以参考这个示例来排查和解决问题。

示例代码

1. 在页面的模板部分(.vue文件)

<template>
  <view class="container">
    <picker-view :value="pickerValue" @change="onPickerChange">
      <picker-view-column>
        <view v-for="(item, index) in columns[0]" :key="index">{{ item }}</view>
      </picker-view-column>
      <picker-view-column>
        <view v-for="(item, index) in columns[1]" :key="index">{{ item }}</view>
      </picker-view-column>
      <!-- 根据需要添加更多列 -->
    </picker-view>
  </view>
</template>

2. 在页面的脚本部分(.vue文件)

<script>
export default {
  data() {
    return {
      pickerValue: [0, 0], // 初始选中值,对应列和行的索引
      columns: [
        ['选项1-1', '选项1-2', '选项1-3'],
        ['选项2-1', '选项2-2', '选项2-3']
      ]
    };
  },
  methods: {
    onPickerChange(e) {
      console.log('picker发送选择改变,携带值为', e.detail.value);
      this.pickerValue = e.detail.value;
      // 根据需要处理选择改变逻辑
    }
  }
};
</script>

3. 在页面的样式部分(.vue文件)

<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}

picker-view {
  width: 300px;
  height: 200px;
}
</style>

排查步骤

  1. 确认事件绑定:确保@change事件已经正确绑定到picker-view组件上。
  2. 检查数据:确保columnspickerValue的数据格式正确,且pickerValue的初始值在columns的有效范围内。
  3. 控制台日志:在onPickerChange方法中添加console.log语句,检查事件是否被触发。
  4. 系统兼容性:查看uni-app和鸿蒙系统的相关文档,确认是否有已知的兼容性问题。
  5. 简化测试:尝试在一个简单的项目中只使用picker-view组件,看是否能复现问题,以排除其他代码的干扰。

如果以上步骤仍然无法解决问题,建议查阅uni-app的官方社区或提交issue寻求官方支持。

回到顶部