从 Vue 中的嵌套子调用父方法
Call parent method from nested child in Vue
我使用 webpack
模板从 vue-cli
构建了一个项目。
现在,我在 App
组件中创建了一个 bootstrap 模态对话框,我想在整个应用程序中重用它。除此之外,我还在 App
组件中创建了一个名为 showMessage
的方法,它实际上完成了显示模态的工作。
现在考虑到我应该能够从任何组件访问该方法,像下面显示的那样调用是不是一个坏主意?
this.$root.$children[0].showMessage('Message', `An email will be sent to ${this.form.email}`)
这是处理全球消息传递的脆弱方式。
至少从模态组件内部在根组件上注册一个事件:
methods: {
showMessage(message) {
// your code to display the message
}
},
created() {
this.$root.$on('showMessage', this.showMessage)
},
destroyed() {
this.$root.$off('showMessage', this.showMessage)
}
然后您可以使用 this.$root.$emit('showMessage', 'foo message')
从该根组件范围内的任何位置显示消息。
创建事件总线可能更好:
Vue.prototype.$bus = new Vue();
methods: {
showMessage(message) {
// your code to display the message
}
},
created() {
this.$bus.$on('showMessage', this.showMessage)
},
destroyed() {
this.$bus.$off('showMessage', this.showMessage)
}
this.$bus.$emit('showMessage', 'foo message')
这样,您的关注点分离会稍微好一些。
我使用 webpack
模板从 vue-cli
构建了一个项目。
现在,我在 App
组件中创建了一个 bootstrap 模态对话框,我想在整个应用程序中重用它。除此之外,我还在 App
组件中创建了一个名为 showMessage
的方法,它实际上完成了显示模态的工作。
现在考虑到我应该能够从任何组件访问该方法,像下面显示的那样调用是不是一个坏主意?
this.$root.$children[0].showMessage('Message', `An email will be sent to ${this.form.email}`)
这是处理全球消息传递的脆弱方式。
至少从模态组件内部在根组件上注册一个事件:
methods: {
showMessage(message) {
// your code to display the message
}
},
created() {
this.$root.$on('showMessage', this.showMessage)
},
destroyed() {
this.$root.$off('showMessage', this.showMessage)
}
然后您可以使用 this.$root.$emit('showMessage', 'foo message')
从该根组件范围内的任何位置显示消息。
创建事件总线可能更好:
Vue.prototype.$bus = new Vue();
methods: {
showMessage(message) {
// your code to display the message
}
},
created() {
this.$bus.$on('showMessage', this.showMessage)
},
destroyed() {
this.$bus.$off('showMessage', this.showMessage)
}
this.$bus.$emit('showMessage', 'foo message')
这样,您的关注点分离会稍微好一些。