关于使用props和定义emits的一点疑问
来源:9-4 Uploader 组件第二部分
慕莱坞0998854
2021-04-28
老师你好,这节课里有如下代码,
{
emits: ['file-uploaded', 'file-uploaded-error'],
props:{
beforeUploaded:{
type: Function as PropType<CheckFunction>
}
}
}
经过尝试,发现下面的写法好像也是可以的
{
props:{
beforeUploaded:{
type: Function as PropType<CheckFunction>
},
onFileUploaded:{
//...
},
onFileUploadedError:{
// ...
}
}
}
老师,我的问题是
1> 以上两种写法有什么本质上的区别嘛?
2> 如果没有的话,那么这些我们为什么需要emit这个字段以及使用emit(‘事件名’,payload)呢?是为了更清晰的表达出一个组件有哪些事件嘛?
写回答
2回答
-
RamirezNi
2021-06-18
emit只是uploader对消费组件(也就是调用uploader的组件)派发的一个事件,但不能直接通过emit派发的事件对uploader组件内部逻辑进行干预,简单说就是通知你一下走到这一步了,就像7点闹钟响了,响了就是告诉你现在7点了,你并不能把时间怎么样,时间依然继续走。
通过props传入的话,比如课程中的beforeupload,组件设计传入这个函数是需要返回boolean类型的值,uploader内部执行消费组件传入的函数得到结果,根据结果可以return或者提示用户等等其他逻辑。比如消费组件拿到beforeupload传递的文件就可以去判断是否符合特定格式 特定大小,超过某大小返回false就可以打断upload上传后续的逻辑
212021-06-19 -
张轩
2021-04-29
同学你好 这是两个概念啊 props 是属性 代表着从一个组件从外面接受到的属性 第二个是事件 代表组件向外发射的事件,在组件上使用 @ 来接收。
如果你用过 React 中的话,它就是你说的这种只有一个属性的概念,而vue 中组件向外传递信息一般都使用事件。当然用函数属性的方式也是可以的。
022021-10-09
相似问题