持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情juejin.cn/post/714765…
可以透传的属性有什么?
class、style、id,如果子组件由自己的类,那么会把透传过来的属性与自己本身的进行合并 v-on监听器继承 如果事件直接放在组件身上,它的根元素也会有该事件。如果根元素本身有点击事件,那么点击时两个事件都会触发
深层组件继承
条件必须是子组件里只有孙子组件,要注意:如果通过props或者emits声明过的事件,孙组件不会接收到这个事件。
禁用Attributes继承
在组件选项中添加inheriAttrs:false属性,根元素会禁用继承透传,但是深层的元素可以使用。在模板里直接通过$attrs拿到透传的值
$attrs拿到的是个对象{class:'bg'},所以读取的时候写:class="$attr.class
透传保留了透传属性的原始大小写。原来父组件写的是什么,传过来的就是什么
以上是一个根节点的Attributes继承
多根节点的Attibutes继承
有多个根节点,需手动调用透传
在父组件中给子组件透传了一个class和一个click事件
子组件有多个根节点,那么第一个节点里的元素想使用类,通过attrs.click"访问
注意:在Vue2中class和style不能通过$attrs.class/style访问到,因为这两个属性只能提供给根元素使用。在Vue3中解决了这个问题
应用层Provide
把probide属性在main.js文件里,添加给app组件,这样的话,震哥哥应用程序都可以使用这个数据了
异步引入组件
实现方法:利用vue的defineAsyncComponent方法引入
下图最后得到的
AsyncComp 是一个外层包装过的组件,仅在页面需要它渲染时才会调用加载内部实际组件的函数。它会将接收到的 props 和插槽传给内部组件,所以你可以使用这个异步的包装组件无缝地替换原始组件,同时实现延迟加载。
全局注册组件,这样的话整个应用程序中无需再引入,可以在各个地方使用。
下图的方法和Vue2中异步加载组件方法类似。vue2中AdminPage的值就是一个函数,返回值是import()方法引入的异步组件