怎么这次在slot中又不用mitt了?。。。
来源:9-5 Uploader 组件第三部分:自定义模版
zippen
2022-05-11
结合上一篇我发的提问“mitt究竟什么时候使用?”,已经有5种父子组件传递数据的方法了。
1.使用emit,组件内用emit发送事件,父组件用@事件的方式接收
2.使用emit,用$on方式接收,但是已废弃?
3.使用mitt,用emitter.emit发送事件,使用emitter.on接收事件
4.使用ref调用子组件的方法
第五种就是下面图片的这种新的方式,我已经彻底被搞懵了,然后又回去了视频5-10看了一遍,然后又看了问答区,这篇问答应该跟第五种方法差不多链接描述
我已经不知道什么时候用什么方法了,好像都可以,又不知道优先用哪个好了。。。。咋办呢?
1回答
-
张轩
2022-05-12
同学你好
两个问题一起回答欧,先分大类,针对不同的场景,选择不同的方案:
先是 子到父组件通信
1 第一种方法是 vue 标准的,推荐的第一选择,子组件使用 emit,父组件使用 on 来接受,在任何情况下都要考虑它为第一选择。这个方向是从子组件到父组件。
再是 父组件要获取子组件的实例,然后进行一些操作,(最常见的是调用子组件上的一些函数)
2 使用 ref,这样父组件可以拿到子组件的实例
3 mitt 是一个事件发射器,是第三方库,它出现是因为上一种 ref 方式没法解决的问题,那就是当有 slot 的时候,我们没法在 slot 上设定 ref,从而需要借助第三方库使用 pub,sub 的方式
4 $on 其实就是 vue2 原来内部提供的一个类似 mitt 的东西,现在废弃掉了,直接不用记了。
最后是 scoped slot ,
单独把它拿出来,因为它的功能和场景二是不一样的,它的作用是让使用组件的时候,可以获取组件中一些对应的值,从而可以进行自定义(目的就是使用组件的时候,可以更好的自定义一些展示),slot 中一般仅限于一些变量,但是没法像场景二那样丰富,比如调用函数等等。
232024-11-20
相似问题