【发布时间】:2017-12-19 14:24:57
【问题描述】:
我有一个简单的根App,其中包括两个不同的组件Room 和Machine。并且这些组件中的每一个都包含一个组件Datatable,这对它们来说都是完全相同的。要在Room 和Machine 之间切换,我使用的是动态组件机制,没什么特别的。当组件发生变化时,我只发出事件,组件Datatable 应该使用当前模块名称将其记录到控制台中。问题是每次我更改组件时,都会多次发送事件。如果我理解正确,在更改组件后应该销毁旧组件并创建新组件,为什么会发生这种情况?我正在使用 Vue.js v.2.4.1
这里是组件:
App.vue:
<template>
<div id="app">
<select style="padding: 10px" v-model="currentModule" @change="changeComponent">
<option value="Room">Room</option>
<option value="Machine">Machine</option>
</select>
<component :is="currentModule"></component>
</div>
</template>
<script>
import Room from './Room.vue';
import Machine from './Machine.vue';
export default {
name: 'app',
components: {
Room,
Machine
},
data () {
return {
currentModule: 'Room'
}
},
methods: {
changeComponent: function() {
Event.$emit('moduleHasChanged', this.currentModule)
}
},
}
</script>
Machine.vue:
<template>
<div>
Machine template
<datatable></datatable>
</div>
</template>
<script>
import Datatable from './Datatable.vue';
export default {
components: {
Datatable
}
}
</script>
Room.vue:
<template>
<div>
Room template
<datatable></datatable>
</div>
</template>
<script>
import Datatable from './Datatable.vue';
export default {
components: {
Datatable
}
}
</script>
Datatable.vue
<template>
<div>
Datatable
</div>
</template>
<script>
export default {
created() {
Event.$on('moduleHasChanged', (currentModule) => {
console.log(currentModule);
})
}
}
</script>
【问题讨论】:
标签: javascript events vue.js vuejs2 vue-component