假设有以下这个例子:
1、父组件
<template>
<test1 :handleChange="onChange" />
<test2 @handleChange="onChange" />
</template>
<script>
...
methods: {
onChange(data) {...}
}
...
</script>
2、test1 组件
<template>
<div @click="onChange"></div>
</template>
<script>
...
props: {
handleChange: Function
},
methods: {
onChange() {
this.handleChange(123)
}
}
...
</script>
3、test2 组件
<template>
<div @click="onChange"></div>
</template>
<script>
...
methods: {
onChange() {
this.$emit("handleChange", 123)
}
}
...
</script>
问题:
test1 组件和 test2 组件,都向外部委派了事件,但是一个是用的属性方法的形式,一个是用的委派事件的形式。父组件进行调用的时候,发现它俩都能执行相同的事儿。
请问它们的区别是什么呢?
我目前知道的区别是:
1、使用属性的形式,相当于把外部的方法传递给子组件来进行调用;而委派事件的方式,是子组件向外部报告一个事件,由外部来进行接收执行。
从执行结果来看,区别不大;从代码架构层面来看,比较推荐“事件-侦听”机制。因为后者有助于父子组件之间解耦,即父组件不要求一定是这个子组件,子组件也不要求父组件一定要传处理函数不然就报错。