未在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 里的内容),会自动绑定到子组件的根元素上
相关推荐
bug总结7 小时前
身份证号脱敏的正确实现
前端·javascript·vue.js
林太白7 小时前
Vite8 Beta来了,Rolldown携手Oxc
前端·javascript·后端
xkxnq7 小时前
第二阶段:Vue 组件化开发(第 19天)
前端·javascript·vue.js
技术净胜8 小时前
Python 操作 Cookie 完全指南,爬虫与 Web 开发实战
前端·爬虫·python
神奇的程序员8 小时前
Nginx日志分析工具-NginxPulse开源了
前端
我是小疯子668 小时前
前端开发入门:HTML、CSS与JS学习指南
前端
知了清语8 小时前
是的,微信小程序的 show-menu-by-longpress 真的会让你无语
前端
Hao_Harrision8 小时前
50天50个小项目 (React19 + Tailwindcss V4) ✨| RangeSlider(范围滑块组件)
前端·typescript·react·tailwindcss·vite7