vue组件间通信方式

一、父子组件通信

<template>
    // 父组件
    <div>
        // 子组件
        <children @search="search" :message.sync="message"></children>
    </div>
</template>
<script>
    import children from "path";
    export default {
        data() {
            return {
                message: "hello children component"
            }
        },
        methods: {
            search(e) {
                // 方法体
                console.log(e); // this event from children
            }
        }
    }
</script>

<template>
    // 子组件
    <div>
        <text>{{ message }}</text>
        <button @click.stop="search">搜索</button>
    </div>
</template>
<script>
    export default {
        props: {
            message: {
                type: String,
                default: ""
            }
        },
        data() {
            return {
                info: "this event from children"
            }
        },
        methods: {
            search() {
                // 向父组件通信
                this.$emit("search",this.info);
                // 修改父组件传过来的参数
                this.$emit("update:message","change from children");
            }
        }
    }
</script>

一般来说,父组件向子组件传参,子组件不能直接修改此参数,若要修改此参数,在父组件传参时需要在参数名后加.sync修饰符,然后在子组件的方法中用this.$emit("update:参数名","目标修改内容")来修改此参数。

如果父组件要使用子组件的方法,可以使用一下方式

<template>
    // 子组件
    <div>
        <text>{{ message }}</text>
    </div>
</template>
<script>
    export default {
        data() {
            return {
                message: '我是子组件',
                info: "this event from children"
            }
        },
        methods: {
            search() {
                // 这是子组件的方法
                console.log(this.info, '这是子组件中的info信息');
            }
        }
    }
</script>
<template>
    // 父组件
    <div>
        <button @click="getChildren" />
        <Children ref="children" />
    </div>
</template>
<script>
    import Children from './common/Children';
    export default {
        components: { Children },
        data() {
            return {
                
            }
        },
        methods: {
            getChildren() {
                // 这是子组件的方法
                this.refs.children.search();
                // this event from children, 这是子组件中的info信息
            }
        }
    }
</script>

 

posted @ 2022-03-09 17:56  给我一个debug  阅读(27)  评论(0)    收藏  举报