我正在 vue.js 中构建表单框架。我有每个字段类型的组件。每个字段类型组件都使用 this.$emit 与父组件通信更改。
我能够使用 v-on 指令在父组件中触发事件,如下所示:
<template>
<div v-if="fieldsLoaded">
<form-select :field="fields.title" v-on:updated="validate" ></form-select>
<form-input :field="fields.first_name" v-on:updated="validate" ></form-input>
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
但是,我不想手动指定每个组件都应该validate单独触发该方法。
如何让父组件监听updated其所有子组件的发射?
编辑:我正在寻找类似下面的东西,虽然 $on 只捕获发生在同一组件中的发射,而不是它的子组件
created: function(){
this.$on('updated',validate)
}
Run Code Online (Sandbox Code Playgroud)
event bus在我看来,最好的方法是使用甚至更好vuex。
对于第一种情况,请看这里
对于这里的第二个
有了event bus你可以发出一个事件,并听取只要你想要的事件(在父母,子女,甚至在同一组件)
VuexIt serves as a centralized store for all the components in an application并且你可以在那个 store 中拥有属性,并且你可以使用和操作它们。
事件总线示例:
主要.js:
import Vue from 'vue'
import App from './App.vue'
export const eventBus = new Vue();
new Vue({
el: '#app',
render: h => h(App)
})
Run Code Online (Sandbox Code Playgroud)
用户组件
<template>
<button @click="clicked">Click me to create event</button>
</template>
<script>
import { eventBus } from './main'
export default {
name: 'User',
methods: {
clicked() {
eventBus.$emit('customEvent', 'a text to pass')
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
管理组件
<template>
<p>The message from event is: {{message}}</p>
</template>
<script>
import { eventBus } from './main'
export default {
name: 'Admin',
data: () => ({
message: ''
})
created() {
eventBus.$on('customEvent', dataPassed => {
this.message = dataPassed
}
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
看看这个教程来学习Vuex
| 归档时间: |
|
| 查看次数: |
3480 次 |
| 最近记录: |