Vue自定义组件未声明的属性为何自动应用到内部q-input上?
你的猜测完全正确,这是Vue 3默认的「非Prop属性透传」机制带来的效果,具体逻辑如下:
- 当自定义组件只有单个根元素时,所有没有被组件声明为
props、也没有被组件显式消费的属性、事件监听器,都会被自动附加到这个根元素上。 - 你封装的
RobsInput组件模板只有<q-input>一个根节点,rules和lazy-rules既没有在组件的props字段中声明,也没有被你手动处理过,因此会被Vue自动透传给根元素q-input,和直接给q-input加这两个属性的效果完全一致,所以自然可以正常生效。
补充两个相关的常用特性:
- 如果不需要默认透传行为,可以在组件的配置项中添加
inheritAttrs: false关闭全局透传,之后你可以按需通过v-bind="$attrs"手动将未声明的属性绑定到任意目标元素上。 - 如果你的组件是多根节点结构,Vue不会自动做属性透传,必须手动给需要继承属性的元素添加
v-bind="$attrs"才能实现相同效果。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

