在一个 Vue Native 项目中,我一直eventName
作为道具从父组件传递给子组件,然后让子组件将其eventName
发送回父组件,并使用它提供给父组件的任何数据。这是一个示例,其中显示了相关的代码部分:
父:settings.vue
// code in template
<dynamic-picker
@event-setting1="(value) => setting1 = value"
:eventName="'event-setting1'"
:value="setting1"
:choices="config.picker.setting1.choices"
/>
<dynamic-picker
@event-setting2="(value) => setting2 = value"
:eventName="'event-setting2'"
:value="setting2"
:choices="config.picker.setting2.choices"
/>
<dynamic-picker
@event-setting3="(value) => setting3 = value"
:eventName="'event-setting3'"
:value="setting3"
:choices="config.picker.setting3.choices"
/>
// code in script
import DynamicPicker from '../../../components/dynamic-picker.vue';
export default {
components: {
DynamicPicker
}
}
孩子:动态选择器.vue
// code in template
<dynamic-picker
:items="choices"
:selected="selected"
:onValueChange="(value) => $emit(eventName, value)"
/>
// code in script
props: ['value', 'eventName', 'choices']
但是,如果孩子有一个静态事件名称,它似乎可以工作,在这种情况下,代码会更改为:
父:settings.vue
// code in template
<dynamic-picker
@event-setting="(value) => setting1 = value"
:value="setting1"
:choices="config.picker.setting1.choices"
/>
<dynamic-picker
@event-setting="(value) => setting2 = value"
:value="setting2"
:choices="config.picker.setting2.choices"
/>
<dynamic-picker
@event-setting="(value) => setting3 = value"
:value="setting3"
:choices="config.picker.setting3.choices"
/>
孩子:动态选择器.vue
// code in template
<dynamic-picker
:items="choices"
:selected="selected"
:onValueChange="(value) => $emit('event-setting', value)"
/>
// code in script
props: ['value', 'choices']
虽然我比第一种方法更喜欢第二种方法,因为它更简单,但我不明白为什么它可以在不引起问题的情况下工作。如何在父文件中多次调用子组件并发出相同的事件名称setting1
,setting2
无论是否setting3
调用它都不会引起问题?我搜索了 Vue 文档,但没有看到这个问题。
编辑: 两个澄清 -
出现在 dynamic-picker.vue 中的动态选择器标签按如下方式导入到该文件中:
从'./dynamic-picker.js'导入DynamicPicker;
添加了上面出现在 settings.vue 的脚本标签中的代码。