美文网首页
2019-10-14Vue的非父子组件通信

2019-10-14Vue的非父子组件通信

作者: 卡布奇诺_7828 | 来源:发表于2019-10-14 15:59 被阅读0次

简单时可用的非父子通信

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo1</title>
</head>

<body>
    <div id="app">
        <my-header></my-header>
        <my-list></my-list>
    </div>
    <script src="vue.js"></script>
    <script>
        var busVM = new Vue();
        var vm = new Vue({
            el: '#app',
            components: {
                'my-header': {
                    template: `<h2>{{message}}</h2>`,
                    data() {
                        return {
                            message: "hello world!!!"
                        };
                    },
                    mounted: function () {
                        busVM.$on('changeEvents', function (str) {
                            console.log(str),
                            this.message=str
                        }.bind(this))
                    },
                },
                'my-list': {
                    template: `<ul>
                                <li @click="getContent" v-for="item in list">
                                    {{item}}
                                </li>
                            </ul>`,
                    data: function () {
                        return {
                            list: ['第一项', '第二项', '第三项']
                        }
                    },
                    methods: {
                        getContent: function (ev) {
                            busVM.$emit('changeEvents', ev.target.innerHTML);
                        }
                    },
                }
            },

        })
    </script>
</body>

</html>

非父子通信

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo2</title>
</head>

<body>
    <div id="app">
        <div>{{count}}</div>
        <my-addbtn :count="count"></my-addbtn>
        <my-removebtn :count="count"></my-removebtn>
    </div>
    <script src="vue.js"></script>
    <script>
        var busVM = new Vue();
        var vm = new Vue({
            el: '#app',
            data() {
                return {
                    count: 0
                }
            },
            mounted: function () {
                busVM.$on('changeEvents', function (num) {
                    console.log(num),
                        this.count = num
                }.bind(this))
            },
            components: {
                'my-addbtn': {
                    template: `<button @click="setCount">+</button>`,
                    props: ['count'],
                    methods: {
                        setCount: function () { 
                            busVM.$emit('changeEvents', this.count+1)
                        }
                    },
                },
                'my-removebtn': {
                    template: `<button  @click="setCount">-</button>`,
                    props: ['count'],
                    methods: {
                        setCount: function () {
                            busVM.$emit('changeEvents', this.count-1)
                        }
                    },
                }
            },
        })
    </script>
</body>

</html>

相关文章

网友评论

      本文标题:2019-10-14Vue的非父子组件通信

      本文链接:https://www.haomeiwen.com/subject/afurmctx.html