未在props中声明的属性

我们用一个自定义表单input组件实现v-model来解释这个问题

javascript 复制代码
Vue.component('base-input', {
  inheritAttrs: false,
  props: ['label', 'value'],
  template: `
    <label>
      {{ label }}
      <input
        v-bind="$attrs"
        v-bind:value="value"
        v-on:input="$emit('input', $event.target.value)"
      >
    </label>
  `
})
javascript 复制代码
<base-input
  label="Username:"
  v-model="username"
  required
  placeholder="Enter your username"
></base-input>
  1. 设置 inheritAttrs: false关闭默认的根元素属性继承行为 ,避免 $attrs 里的属性被自动绑定到根元素 <label> 上。
  2. 手动写 v-bind="$attrs" 并放在 <input> 上:明确告诉 Vue,把 $attrs 里的属性绑定到 <input> 上(这才是这些属性真正该去的地方)。

默认情况下(即不设置 inheritAttrs: false 时):

  • 父组件传递给子组件、且子组件未在 props 中声明的属性(也就是 $attrs 里的内容),会自动绑定到子组件的根元素上
相关推荐
颜酱7 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
失忆爆表症8 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录8 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜8 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛8 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter
利刃大大8 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
NEXT069 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain
念风零壹9 小时前
AI 时代的前端技术:从系统编程到 JavaScript/TypeScript
前端·ai
光影少年9 小时前
react的hooks防抖和节流是怎样做的
前端·javascript·react.js
小毛驴8509 小时前
Vue 路由示例
前端·javascript·vue.js