Vue组件入门(十)Attributes 继承

简介: Vue组件入门(十)Attributes 继承

前言


在我们使用一个组件的时候,并在上面添加相应的class样式的时候,你会发现,他会进行一个透传,作用于子组件的内容元素,当然,也包括一些点击事件等等,而这就是Attributes 继承。而他会怎么继承呢?以何种规则继承呢?下面我们来具体看一看。


Attributes 继承


当我们的一个组件以单个元素为根进行渲染时,使用该组件并在上声明的props、emits属性以外的元素,进行透传。该组件的根元素会对透传的元素进行继承。例如:class、style以及id等等。


举个例子,比如我们有一个Title组件:


// Title.vue
<span>title</span>
复制代码


在父组件中使用Title组件,并对其传入一个class:


<Title class="gray" />
复制代码


最后,子组件会被渲染成如下这样:


<span class="gray">title</span>
复制代码


你会发现,我们并没有声明一个class的prop,他会自动把calss透传给子组件,而子组件的根元素会进行相应的继承。


这个时候,你可能会想到,如果我们子组件的根元素,已经声明了class了,他还会继承吗?或者说会覆盖掉?


class合并


当子组件的根元素已有class的时候,他会把父组件透传下来的class进行一个合并。就像如下这样:


修改Title组件:


// Title.vue
<span class="bold">title</span>
复制代码


然后观看进行透传的组件渲染的样子:


// Title.vue
<span class="bold gray">title</span>
复制代码


对于 style 属性,也会用和class一样的方式进行合并。


还有一点要强调的是,对于v-on声明的事件监听器也会进行透传合并。


v-on事件监听器的继承与合并


<Title @click="handle" />
复制代码


如上,声明的click会被透传到Title组件的根元素上,而当其组件的根元素被点击时,也会触发父组件的onClick方法。


而如果,子组件的根元素本身也绑定了一个v-on事件,当其根元素被点击的时候,该事件会和父组件绑定的事件一起触发。

相关文章
|
1天前
|
存储 API
vue3中如何动态自定义创建组件并挂载
vue3中如何动态自定义创建组件并挂载
|
1天前
|
JavaScript API
vue学习(13)监视属性
vue学习(13)监视属性
10 2
|
1天前
|
JavaScript
vue 函数化组件
vue 函数化组件
|
1天前
|
JavaScript 前端开发
vue学习(15)watch和computed
vue学习(15)watch和computed
9 1
|
1天前
|
JavaScript
vue学习(14)深度监视
vue学习(14)深度监视
10 0
|
2天前
|
JavaScript
vue中watch的用法
vue中watch的用法
|
2天前
|
JavaScript 前端开发
vue动态添加style样式
vue动态添加style样式
|
2天前
|
JavaScript 前端开发
Vue项目使用px2rem
Vue项目使用px2rem
|
9天前
|
JavaScript 前端开发
vue学习(6)
vue学习(6)
30 9