Vue:事件方法 - 混乱
Vue: Event Methods- Confusion
我有一个启用或禁用 [=36=] 模式的父 Vue。在非编辑模式下,所有组件都是只读的。
我已经通过数据对象实现了这个并且一切正常。
我已经在子组件中拆分了一些组件。
从父级发送了一条带有新编辑模式状态的 $emit 消息:
methods: {
toggleMode () {
this.editMode = !this.editMode
this.$emit('edit-mode-change', this.editMode)
}
使用 Vue DevTools 我可以看到消息已发出。
但是,我似乎无法在我的子组件中接收到它!我查看了文档,但是 none 的示例与这种情况相匹配。这是我目前拥有的(在子组件中):
methods: {
onEditModeChange: function (mode) {
console.log('mode is', mode)
this.editMode = mode
}
也尝试过:
events: {
onEditModeChange: function (mode) {
console.log('mode is', mode)
this.editMode = mode
}
此外,我收到如下浏览器控制台错误:
[Vue warn]: Invalid handler for event "edit-mode-change": got false
(found in <Dimensions> at /home/anthony/Projects/Towers-Vue/src/components/assets/Dimensions.vue)
我确定我做错了一些基本错误,但文档没有引用 events: {} 块,但我在其他代码中看到了它。它也没有说明如何实现侦听器。
感谢您抽出宝贵时间查看此内容post,如果您能指出正确的方向,我们将不胜感激。
在 Vue 2 中,事件只能横向或向上流动,不能向下流动。
您真正想要的是简单地将一个 prop 传递到您的组件中。
在parent JS:
toggleMode () {
this.editMode = ! this.editMode;
}
在 parent 模板中:
<child-component-1 :editMode="editMode"></child-component-1>
...same for others...
然后在每个 child 组件中简单地接受 editMode
作为道具:
{
props: ['editMode']
}
您现在可以在 child 的模板中使用 editMode
。它将跟踪 parent 的 editMode
,因此无需手动 events/watchers。
vue2 的工作方式是通过 one-direction 数据流,从 parent 到 child,所以在 parent 组件中你可以
<template>
<child-component :isEditing="editMode"></child-component>
</template>
<script>
export default {
methods: {
toggleMode () {
this.editMode = !this.editMode
this.$emit('edit-mode-change', this.editMode)
}
}
}
并在 child 组件中使用 props 获取数据
Vue.component('child-component', {
props: ['isEditing'],
template: '<span>edit mode: {{ isEditing }}</span>'
})
我们已经涵盖了 child 的编辑模式。现在如果你想从 child 发送数据到 parent,那么 child 需要 "emit" 一个信号到 parent,因为道具是 "read only"
在 child 组件中你在任何时候做
someMethod() {
this.$emit('editDone', dataEdited);
}
并且在您的 parent 组件中您 "intercept" 使用 on:
的消息
<template>
<child-component
:isEditing="editMode"
@editDone="someParentMethod"></child-component>
</template>
您好!
我有一个启用或禁用 [=36=] 模式的父 Vue。在非编辑模式下,所有组件都是只读的。
我已经通过数据对象实现了这个并且一切正常。
我已经在子组件中拆分了一些组件。
从父级发送了一条带有新编辑模式状态的 $emit 消息:
methods: {
toggleMode () {
this.editMode = !this.editMode
this.$emit('edit-mode-change', this.editMode)
}
使用 Vue DevTools 我可以看到消息已发出。
但是,我似乎无法在我的子组件中接收到它!我查看了文档,但是 none 的示例与这种情况相匹配。这是我目前拥有的(在子组件中):
methods: {
onEditModeChange: function (mode) {
console.log('mode is', mode)
this.editMode = mode
}
也尝试过:
events: {
onEditModeChange: function (mode) {
console.log('mode is', mode)
this.editMode = mode
}
此外,我收到如下浏览器控制台错误:
[Vue warn]: Invalid handler for event "edit-mode-change": got false
(found in <Dimensions> at /home/anthony/Projects/Towers-Vue/src/components/assets/Dimensions.vue)
我确定我做错了一些基本错误,但文档没有引用 events: {} 块,但我在其他代码中看到了它。它也没有说明如何实现侦听器。
感谢您抽出宝贵时间查看此内容post,如果您能指出正确的方向,我们将不胜感激。
在 Vue 2 中,事件只能横向或向上流动,不能向下流动。
您真正想要的是简单地将一个 prop 传递到您的组件中。
在parent JS:
toggleMode () {
this.editMode = ! this.editMode;
}
在 parent 模板中:
<child-component-1 :editMode="editMode"></child-component-1>
...same for others...
然后在每个 child 组件中简单地接受 editMode
作为道具:
{
props: ['editMode']
}
您现在可以在 child 的模板中使用 editMode
。它将跟踪 parent 的 editMode
,因此无需手动 events/watchers。
vue2 的工作方式是通过 one-direction 数据流,从 parent 到 child,所以在 parent 组件中你可以
<template>
<child-component :isEditing="editMode"></child-component>
</template>
<script>
export default {
methods: {
toggleMode () {
this.editMode = !this.editMode
this.$emit('edit-mode-change', this.editMode)
}
}
}
并在 child 组件中使用 props 获取数据
Vue.component('child-component', {
props: ['isEditing'],
template: '<span>edit mode: {{ isEditing }}</span>'
})
我们已经涵盖了 child 的编辑模式。现在如果你想从 child 发送数据到 parent,那么 child 需要 "emit" 一个信号到 parent,因为道具是 "read only"
在 child 组件中你在任何时候做
someMethod() {
this.$emit('editDone', dataEdited);
}
并且在您的 parent 组件中您 "intercept" 使用 on:
的消息<template>
<child-component
:isEditing="editMode"
@editDone="someParentMethod"></child-component>
</template>
您好!