Vue3透传属性、应用层provide、异步引入组件1

125 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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事件 1.png 子组件有多个根节点,那么第一个节点里的元素想使用类,通过attrs.class访问,事件通过@click="attrs.class访问,事件通过@click="attrs.click"访问 2.png 注意:在Vue2中class和style不能通过$attrs.class/style访问到,因为这两个属性只能提供给根元素使用。在Vue3中解决了这个问题

应用层Provide

把probide属性在main.js文件里,添加给app组件,这样的话,震哥哥应用程序都可以使用这个数据了

异步引入组件

实现方法:利用vue的defineAsyncComponent方法引入

1.png 下图最后得到的 AsyncComp 是一个外层包装过的组件,仅在页面需要它渲染时才会调用加载内部实际组件的函数。它会将接收到的 props 和插槽传给内部组件,所以你可以使用这个异步的包装组件无缝地替换原始组件,同时实现延迟加载。 2.png 全局注册组件,这样的话整个应用程序中无需再引入,可以在各个地方使用。 3.png 下图的方法和Vue2中异步加载组件方法类似。vue2中AdminPage的值就是一个函数,返回值是import()方法引入的异步组件 4.png