【发布时间】:2018-06-25 11:07:54
【问题描述】:
我有一个组件,它在某些活动时向其父级$emit。
父级监听这个事件并在接收到时触发一个函数。这是在mount()组装的:
<template>
<v-app>
<v-toolbar fixed app>
<v-toolbar-title v-text="title"></v-toolbar-title>
<v-spacer></v-spacer>
<v-btn color="error" dark large>Large Button</v-btn>
</v-toolbar>
<v-content>
<new-case v-on:dirty="updateDirty"></new-case>
</v-content>
<v-footer app>
<span>© 2017</span> dirty: {{dirty}}
</v-footer>
</v-app>
</template>
<script>
export default {
data() {
return {
case: {
id: null,
title: null,
},
cases: [],
title: 'Vuetify.js',
dirty: false,
}
},
watch: {
dirty: () => {
console.log('requesting relaod of data')
}
},
methods: {
updateDirty(what) {
console.log('requesting update of dirty state '+what)
this.dirty = what
}
},
mounted() {
this.$on('dirty', this.updateDirty())
}
}
</script>
整个机制工作正常(emmited even 被父级正确处理),除了当组件被挂载时,我在控制台中看到
17:36:01.380 App.vue?ea99:36 requesting update of dirty state undefined
17:36:01.449 App.vue?ea99:31 requesting relaod of data
17:36:01.561 backend.js:1 vue-devtools Detected Vue v2.5.13
为什么在安装组件时会触发this.updateDirty()?(即使尚未发出任何内容 - 不仅尚未使用会发出某些内容的组件,而且 DevTools Vue 面板也没有使用尚未显示任何事件)
【问题讨论】:
-
改用
this.$on('dirty', this.updateDirty)。当您设置事件侦听器时,您可能正在执行该方法,而您实际上应该只是传递对您想要的函数或方法的引用。如果这不起作用,请考虑向我们展示您的new-case代码。
标签: vue.js vue-component