uni-app中input组件能否v-model和@input一起使用?

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

uni-app中input组件能否v-model和@input一起使用?

问题描述

一旦触发input事件就会报错“TypeError: fn is not a function”,不使用v-model绑定就是正常的

vue3 setup 编译成微信小程序

图片

代码示例

<template>  
    <input v-model="text" [@input](/user/input)="change" />  
</template>  
<script setup>  
import {ref} from 'vue';  
const text = ref('');  
const change = (e)=>{  
    console.log(e.target.value);  
}  
</script>

7 回复

你是哪个版本出现的问题?能确定是与此有关吗?我这跑了一下没有复现出来


我补充下,我是在v-for的input后报错的

我看去年8月份的时候也有人提了类似的问题,问题和我的差不多,都是xx is not a function; 但是双向绑定值是生效的,就是会报这个错误。

您好,能看下后续的补充吗

你好,请问能看下后续的回复吗?

回复 1***@qq.com: 感谢反馈,已复现这个问题,还需进一步验证问题产生原因

在uni-app中,input组件的v-model@input事件是可以一起使用的,但它们有不同的用途和行为。v-model用于在数据绑定中实现双向数据绑定,而@input事件则用于在输入值发生变化时执行特定的逻辑。

以下是一个示例代码,展示了如何在uni-app的input组件中同时使用v-model@input

<template>
  <view>
    <input
      type="text"
      v-model="inputValue"
      @input="handleInput"
      placeholder="请输入内容"
    />
    <view>当前输入值: {{ inputValue }}</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      inputValue: '' // 绑定的输入值
    };
  },
  methods: {
    handleInput(event) {
      // 这里可以获取到原生事件对象
      console.log('Input event:', event);
      // 你可以在这里处理输入值的变化,比如格式化输入、校验等
      // 但注意,这里的值通常已经通过v-model更新到inputValue中了
      // 除非你有特殊需求,否则一般不需要再次更新inputValue
      // this.inputValue = event.detail.value; // 这行通常是多余的,因为v-model已经处理了

      // 示例:将输入值转换为大写(仅作为示例,实际使用中可能不需要这样做)
      // this.inputValue = event.detail.value.toUpperCase();
      // 但更推荐的做法是使用computed属性或watcher来处理这类逻辑
    }
  }
};
</script>

<style scoped>
/* 样式可以根据需要调整 */
input {
  padding: 10px;
  font-size: 16px;
  margin-bottom: 20px;
  border: 1px solid #ccc;
  border-radius: 4px;
}
</style>

在这个示例中,v-model绑定了inputValue数据,这意味着输入框的值会与inputValue保持同步。当用户在输入框中输入内容时,inputValue会自动更新。

同时,@input事件绑定了一个名为handleInput的方法。每当输入框的值发生变化时,这个方法都会被调用,并传入一个事件对象。在这个方法中,你可以访问到原生的事件对象,并执行任何你需要的逻辑,比如日志记录、输入校验等。

需要注意的是,在大多数情况下,你不需要在@input事件处理器中再次更新inputValue,因为v-model已经帮你处理了这部分逻辑。如果你需要在输入值变化时执行特定的逻辑(如格式化输入),建议使用计算属性(computed)或观察者(watcher)来实现,而不是在@input事件处理器中直接操作数据。

回到顶部