Vue — 组件prop、event、slot 技巧
最后更新于:2022-04-02 08:08:38
[TOC]
>[success] # prop、event、slot 技巧
~~~
1.一个再复杂的组件,都是由三部分组成的:prop、event、slot,所以不管是
阅读他人的组件还是自己编写组件一定针对这三个地方去下手
~~~
>[info] ## prop
~~~
1.'prop' 定义了这个组件可配置的属性
2.'props' 最好用对象的写法,这样可以针对每个属性设置类型、默认值或自
定义校验属性的值(简单说使用它的校验版本)
3.一些常用的'html' 标签属性例如'id','value' 可以直接在父组件调用子组件的
时候直接写在组件上,这些定义的值会覆盖原来组件定义的相同值,并且值
作用在组件最外层dom元素上。
4.'class' 和 'style' 是个例外会直接将在父组件调用时候,将子组件存在的属性'class' 和'style'
c进行合并(指的也是最外层)
5.像'disabled' 这类有意义的属性,可以在组件调用时候直接使用,'props '
中只用定义相同名字即可直接使用
6.如果不想让我们定义一些属性不在附加到子组件最外层标签,想只使用'props'定义好的属性,
这里需要设置属性 'inheritAttrs: false' ,产生效果除了class 和 style 依旧会像四条一样合并,但是
不会在出现第 2 ,5 覆盖和没有在props定义的属性直接使用的问题(默认'inheritAttrs: true' )
~~~
>[danger] ##### 自定义一个button组件 -- 案例说明
~~~
1.当没用指定'inheritAttrs' 的时候默认为true,如果你没在子组件通过prop 定义将会产生以下效果
'class' 和 'style',会自动和子组件的最外层dom元素上的class 和style 合并,其他元素标签会以
父组件为准并且替代子组件最外层dom上的相同元素
2.关闭 inheritAttrs (设置是false) 除class和style 外其他都不好被禁止掉没有上面说的效果
~~~
~~~
~~~
* 使用
~~~
~~~
* 没有关闭 inheritAttrs (默认是true)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0229869ff7c39af567f8bdb78235363a_874x233.png)
* 关闭 inheritAttrs (设置是false)
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7c02a07dcd55d0c84dc7cdcd4b6118d4_835x236.png)
* class 的说明
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2b57f65e8f1af15f8ebf759d03c73005_777x96.png)
>[info] ## slot
~~~
1.插槽看之前的插槽篇即可
~~~
>[info] ## event
~~~
1.通过 $emit,就可以触发自定义的事件在父组件事件,将子组件的内容通过
绑定的$emit传递,比较常见的就是子传父
2.第二中就是使用'native',这个是给组件绑定事件时候加的修饰符
2.1. 组件绑定事件时候,必须加上native ,不然不会生效(监听根元素的原生事件,使用 `.native` 修饰符)
2.2. 等同于在子组件中,子组件内部处理然后向外发送click事件:`$emit("click".fn)`
~~~
>[danger] ##### 案例
~~~
1.下面案例中'myButton' 是一个组件,这个案例是直接给在父组件条用的子组件绑定了一个事件,
这个事件没有用'$emit' 子传父,而是直接绑定一个父组件的方法
2.使用的场合,当我们想直接触发某些组件的时候,比如这种'button'组件触发无非是要进行某
中确认,我们根不就不需要为此在做一次子传父的处理,只要直接让组件和我们的父组件中的
方法关联即可,直接使用'native' 修饰
~~~
~~~
~~~
';