vue 父子组件通信


一.原理

在这里插入图片描述



二.父传子

使用父传子步骤如下

  • 写父组件
  • 写子组件
  • 在子组件里,用 props 属性,新进到这个里面的属性就可以当本省的属性来用
  • 在父组件里写入子组件,并且用类似于属性的功能,把数据给他穿进去
 <div id="app">
        <cpn :cmovies="message" :cmessage="movies"></cpn>
    </div>

   <div id="app">
        <cpn :cmovies="movies" :cmessage="message"></cpn>
    </div>

    <template id="cpn">
        <div>
            <p>{{cmovies}}</p>
            <p>{{cmessage}}</p>
        </div>
    </template>


    <script>
        const cpn = {
            template: '#cpn',
            data() {
                return {}
            },
            props: ["cmovies", 'cmessage'], // 可以是数组,也可以是对象,
        }

        const app = new Vue({
            el: '#app',
            data: {
                message: "你好",
                movies: ['海王', '海贼王', '海尔兄弟'],
            },
            components: {
                cpn
            }
        })
    </script>



三.子传父

  • 子组件里定义方法
  • 触发子组件的方法,把子组件里再触发 $emit 方法
  • 父组件里使用 @son=“butclick”
  • 通过父组件的这个方法,把子组件传过来的数据给打印出来。

要通过事件来传值。

<body>

    <div id="app">
        <!-- 这个时候,参数的是可以省略的 -->
        <cpn @sonclick="cpnClick"></cpn>
    </div>

    <template id="cpn">
        <div>
            <button v-for="item in categories" @click="btnclick(item)">{{item.name}}</button>
        </div>
    </template>

    <script>
        const cpn = {
            template: "#cpn",
            data() {
                return {
                    categories: [{
                            id: "a",
                            name: "热门推荐"
                        },
                        {
                            id: "b",
                            name: "手机数码"
                        },
                        {
                            id: "c",
                            name: "电脑办公"
                        }
                    ]
                }
            },
            methods: {
                btnclick(item) {
                    this.$emit("sonclick", item);
                }
            }
        }

        const app = new Vue({
            el: "#app",
            data: {
                message: "你好",
            },
            components: {
                cpn
            },
            methods: {
                cpnClick(item) {
                    console.log(item.name);
                },
            }
        })
    </script>

</body>
posted @ 2021-05-12 17:49  沧海一声笑rush  阅读(71)  评论(0编辑  收藏  举报