当前位置:首页 > VUE

vue组件v model实现

2026-02-24 12:28:06VUE

Vue 组件实现 v-model

在 Vue 中,v-model 是语法糖,用于在表单元素或自定义组件上实现双向数据绑定。对于自定义组件,v-model 默认会利用 value prop 和 input 事件,但可以通过 model 选项进行自定义。

基本实现方式

自定义组件中实现 v-model 需要定义一个 value prop 并在数据变化时触发 input 事件。

<template>
  <input
    :value="value"
    @input="$emit('input', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['value']
}
</script>

父组件中使用方式:

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

自定义 prop 和事件

如果需要修改默认的 value prop 和 input 事件,可以在组件中通过 model 选项配置。

<template>
  <input
    :value="checked"
    @change="$emit('change', $event.target.checked)"
  />
</template>

<script>
export default {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: ['checked']
}
</script>

父组件中使用方式:

<custom-checkbox v-model="isChecked"></custom-checkbox>

使用计算属性

对于更复杂的逻辑,可以使用计算属性来处理双向绑定。

vue组件v model实现

<template>
  <input v-model="internalValue" />
</template>

<script>
export default {
  props: ['value'],
  computed: {
    internalValue: {
      get() {
        return this.value;
      },
      set(val) {
        this.$emit('input', val);
      }
    }
  }
}
</script>

多个 v-model 绑定(Vue 2.4+)

在 Vue 2.4 及以上版本,可以通过 .sync 修饰符实现多个属性的双向绑定。

子组件:

<template>
  <input
    :value="title"
    @input="$emit('update:title', $event.target.value)"
  />
  <input
    :value="content"
    @input="$emit('update:content', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['title', 'content']
}
</script>

父组件中使用方式:

vue组件v model实现

<custom-input
  :title.sync="postTitle"
  :content.sync="postContent"
></custom-input>

Vue 3 中的变化

在 Vue 3 中,v-model 的默认 prop 从 value 改为 modelValue,事件从 input 改为 update:modelValue。同时支持多个 v-model 绑定。

子组件:

<template>
  <input
    :value="modelValue"
    @input="$emit('update:modelValue', $event.target.value)"
  />
</template>

<script>
export default {
  props: ['modelValue'],
  emits: ['update:modelValue']
}
</script>

父组件中使用方式:

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

多个 v-model 绑定:

<custom-input
  v-model:title="postTitle"
  v-model:content="postContent"
></custom-input>

通过以上方法,可以灵活地在 Vue 组件中实现 v-model 功能,满足不同的业务需求。

标签: 组件vue
分享给朋友:

相关文章

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现路由

vue实现路由

Vue 路由的实现方法 Vue 路由可以通过 Vue Router 库来实现,Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue Router…

vue实现curd

vue实现curd

Vue实现CRUD操作 初始化Vue项目 使用Vue CLI创建新项目,安装必要依赖如axios用于HTTP请求 vue create crud-demo cd crud-demo npm inst…

vue网页实现

vue网页实现

Vue 网页实现指南 环境准备 安装 Node.js 和 npm/yarn,确保环境配置正确。使用 Vue CLI 或 Vite 创建项目框架,快速搭建开发环境。 npm install -g @…

vue 分页 实现

vue 分页 实现

Vue 分页实现方法 使用第三方库(如 Element UI) Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm ins…