前端/移动开发面试题更新 2026-08-05

在 Vue 中,自定义组件是否支持使用 v-model 指令?请说明其实现原理和具体步骤。

前端/移动开发编码实现技术原理Vue

考察说明

考察对 Vue 中 v-model 语法糖机制的理解以及自定义组件中如何实现双向绑定。

回答思路

  1. 【回答框架 1】v-model 只是语法糖,在 Vue 2 中默认展开为 value prop 和 input 事件,在 Vue 3 中则展开为 modelValue prop 和 update:modelValue 事件。
  2. 【回答框架 2】在自定义组件中实现 v-model,需要在组件内部声明对应的 prop(如 Vue 2 的 value 或 Vue 3 的 modelValue),并在需要更新时触发对应的事件(input 或 update:modelValue),将新的值作为参数传递。
  3. 【回答框架 3】还可以通过 model 选项(Vue 2)或 defineModel(Vue 3.4+)来自定义 v-model 绑定的 prop 名称和事件名称,以适应更多场景。
  4. 【回答框架 4】对于 v-model 的修饰符(如 .trim、.number)在自定义组件中可以通过 v-model 的参数或 defineModel 的 get 和 set 来处理,或者通过组件内的事件处理实现。
  5. 【关键点 1】v-model 是语法糖,本质是 prop 和事件的组合。
  6. 【关键点 2】Vue 2 中默认 prop 为 value,事件为 input;Vue 3 中默认 prop 为 modelValue,事件为 update:modelValue。
  7. 【关键点 3】组件内必须显式声明相应 prop 并触发相应事件,才能实现双向绑定。
  8. 【关键点 4】可以通过 model 选项或 defineModel 自定义绑定属性名和事件名。
  9. 【易错点 1】忘记声明 prop 或触发事件,导致 v-model 无效。
  10. 【易错点 2】在 Vue 3 中误用 value/input 而忽略 modelValue/update:modelValue。
  11. 【易错点 3】混淆 v-model 和 .sync 修饰符,虽然 Vue 2 中 .sync 类似但属不同机制。