Vue 非父子组件间传值

Vue 项目由多个组件组成,如何解决复杂的多层间传值?

Vuex

Bus/总线/发布订阅模式/观察者模式

兄弟组件间的值传递。

两个组件通过一个总线连接起来。

点击组件’Muzico‘将组件’Yococo‘的内容也变成’Muzico‘,而当点击组件’Yococo‘将组件’Muzico‘的内容也变成’Yococo‘。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="./vue.v2.6.10.dev.js"></script>
    </head>
    <body>
        <div id="app">
            <child content="Muzico"></child>
            <child content="Yococo"></child>
        </div>
        
        <script>
            Vue.prototype.bus = new Vue()
            
            Vue.component('child', {
                props: {
                    content: String,
                },
                data: function() {
                    return {
                        selfContent: this.content,
                    }
                },
                template: '<div @click="handleClick">{{selfContent}}</div>',
                methods: {
                    handleClick: function() {
                        this.bus.$emit('change', this.content)
                    },
                },
                mounted: function() {
                    var that = this
                    this.bus.$on('change', function(msg) {
                        that.selfContent = msg
                    })
                },
            })
            
            var vm = new Vue({
                el: '#app',
            })
        </script>
    </body>
</html>