当前位置:首页 > VUE

vue input实现v model

2026-02-24 19:08:02VUE

实现 v-model 的基本用法

在 Vue 中,v-model 是用于实现表单元素双向数据绑定的语法糖。对于 <input> 元素,v-model 会自动根据输入类型绑定对应的属性和事件。

<template>
  <input v-model="message" placeholder="请输入内容">
  <p>输入的内容是:{{ message }}</p>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

自定义组件实现 v-model

在自定义组件中实现 v-model,需要定义 model 选项或使用 Vue 2.6+ 的 v-model 语法。

<template>
  <custom-input v-model="message"></custom-input>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    'custom-input': {
      props: ['value'],
      template: `
        <input 
          :value="value"
          @input="$emit('input', $event.target.value)"
        >
      `
    }
  }
}
</script>

Vue 3 中的 v-model 变化

Vue 3 对 v-model 进行了改进,默认使用 modelValue 作为 prop,update:modelValue 作为事件。

<template>
  <custom-input v-model="message"></custom-input>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  components: {
    'custom-input': {
      props: ['modelValue'],
      emits: ['update:modelValue'],
      template: `
        <input 
          :value="modelValue"
          @input="$emit('update:modelValue', $event.target.value)"
        >
      `
    }
  }
}
</script>

修饰符的使用

v-model 支持修饰符来改变默认行为,常见的有 .lazy.number.trim

<template>
  <!-- 在 change 事件后同步 -->
  <input v-model.lazy="message">

  <!-- 自动将输入转为数字 -->
  <input v-model.number="age" type="number">

  <!-- 自动去除首尾空格 -->
  <input v-model.trim="text">
</template>

多选输入绑定

对于复选框和单选按钮,v-model 的绑定方式有所不同。

<template>
  <!-- 单个复选框 -->
  <input type="checkbox" v-model="checked">

  <!-- 多个复选框 -->
  <input type="checkbox" value="A" v-model="checkedItems">
  <input type="checkbox" value="B" v-model="checkedItems">

  <!-- 单选按钮 -->
  <input type="radio" value="One" v-model="picked">
  <input type="radio" value="Two" v-model="picked">
</template>

<script>
export default {
  data() {
    return {
      checked: false,
      checkedItems: [],
      picked: ''
    }
  }
}
</script>

文本域绑定

<textarea> 元素使用 v-model 的方式与普通输入框类似。

vue input实现v model

<template>
  <textarea v-model="message" placeholder="请输入多行文本"></textarea>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

标签: vueinput
分享给朋友:

相关文章

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue实现发送值接受值

vue实现发送值接受值

Vue 实现父子组件传值 父组件向子组件传值(props) 父组件通过 v-bind 或简写 : 向子组件传递数据。子组件通过 props 接收数据。 父组件代码: <template&g…

vue实现后退

vue实现后退

Vue 实现后退功能的方法 在 Vue 中实现后退功能通常可以通过以下几种方式完成,具体取决于应用场景和需求。 使用 window.history API 通过原生 JavaScript 的 win…

vue交互实现

vue交互实现

Vue 交互实现方法 Vue.js 提供了多种方式实现用户交互,包括事件处理、表单绑定、动态渲染等。以下是常见的交互实现方法: 事件处理 通过 v-on 或 @ 指令绑定事件,触发方法或直接执行表达…

vue实现截图

vue实现截图

Vue 实现截图的方法 使用 html2canvas 库 安装 html2canvas 库: npm install html2canvas 在 Vue 组件中使用: import html2ca…

vue 动画 实现

vue 动画 实现

vue 动画实现方法 Vue 提供了多种方式实现动画效果,主要包括过渡动画和动态动画两类。 使用 <transition> 组件实现基础过渡 通过 Vue 内置的 <transit…