Vue中非Prop的Attribute与禁用Attribute继承

一个非 prop 的 attribute 是指传向一个组件,但是该组件并没有相应 prop 定义的 attribute

 

1、attribute和property

首先要区分JS中的attribute和property:https://www.cnblogs.com/lmjZone/p/8760232.html

attribute:属性; 特征; 性质

property:性质;特性

翻译类似,但是在JS中:

  • property是DOM中的属性,是JavaScript里的对象。property是这个DOM元素作为对象,其附加的内容,例如childNodes、firstChild等。
  • attribute是HTML标签上的特性,它的值只能够是字符串。attribute就是DOM节点自带的属性,例如html中常用的id、class、title、align等,与他们并列。其内部包含自定义属

attribute是property的子集。property内包含了DOM节点自带的属性;attribute是一个Attr类型的对象,拥有NodeType、NodeName等属性这个对象按顺序记录了我们在TAG中定义的属性和属性的数量。

可以这样理解,只要是DOM出现的属性,不管是否自定义,都属于attribute;常用的基本属性才属于property。

取值:

  • getAttribute()可以取得任何特性,不管是标准的还是自定义的。
  • porperty取值就是常用的  ‘.’  div.id、person.name

赋值:

  对属性Property可以赋任何类型的值,而对特性Attribute只能赋值字符串!

 

property和attribute赋值关系:

  • property能够从attribute中得到同步;
  • attribute不会同步property上的值;
  • attribute和property之间的数据绑定是单向的,attribute->property;
  • 更改property和attribute上的任意值,都会将更新反映到HTML页面中;

 

2、Vue中非Prop的Attribute

  其实就是用props父传子时,子组件未定义合适的props,从而attribute添加到这个子组件的根元素上

子组件未定义props:

  

 

 attribute添加到根元素上

  

 

 

3、禁用attribute继承

如果不想让非prop添加到根元素上,

  3.1、可以使用  inheritAttrs: false 禁止继承,不绑定于根

 

  3.2、使用v-bind="$attrs"绑定在别的元素上(如果不添加inheritAttrs: false这样还是会绑定在根上)

 

 

posted @ 2021-11-12 15:13  Jacky02  阅读(395)  评论(0)    收藏  举报