Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览

简介: Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览

父子组件通信

简单来说就是利用回调函数获取value

  • 直接传递属性
<Child :getChildValue="getChildValue" /> // 传递的是一个函数
Child组件里面可以使用 this.$attrs.getChildValue() 来调用
  • 通过@方式传递
<Child @getChildValue="getChildValue" />
Child组件调用 this.$emit('getChildValue', value);
  • 利用$parent$children相互通信 (官网不太支持你们这样搞,小心点)

this.$parent   获取父组件实例 可以使用父组件实例的属性

this.$children 获取子组件数组 可以利用下标调用子组件实例的属性

爷孙组件通信

  • 爷孙组件之间是不能直接通信的,但可以构造成两个父子组件,通过父组件来传递数据

虽然不能通信,但是传递数据还是ok的

  • provide + inject

这种数据传递并不是响应式

provide: {
    data: '父组件提供的数据'
},
// 在包裹的任何子组件中 都可以使用inject获取数据
Child组件
inject: ['data']

兄弟组件通信

场景:

<Child />          
 <Child1 />
  • 简单粗暴的办法
    Child组件先传递给父组件,然后再由父组件传入Child1这个组件,具体不多赘述
  • Vuex这个后面会写文章,现在也不多说,但是是个解决方案
  • Event Bus数据总线 创建公共类

主要就是利用一个公共的vue类 进行事件的分发,然后再利用这个类接收。

示例:

  • 创建bus.js
/**
 *  Created By 憧憬
 */
import Vue from 'vue';
export default new Vue;
  • Child组件
<template>
    <div class="Child">
        <button @click="sendValue">传递给父组件</button>
    </div>
</template>
<script>
    import bus from '../../bus';
    export default {
        data(){
            return {
                value: 'child - value'
            };
        },
        methods: {
            sendValue() {
                bus.$emit('sendChildValue', this.value);
            }
        }
    };
</script>
  • Child1组件
<template>
    <div class="Child1">
        <div>
            child1
        </div>
    </div>
</template>
<script>
    import bus from '../../bus';
    export default {
        props: {},
        mounted() {
            this.getValue();        // 在挂载阶段调用 函数 进行监听
        },
        beforeDestroy() {           // 卸载取消
            // 取消监听
            bus.$off('sendChildValue');
        },
        methods: {
            getValue() {
                // 对应分发的键 接收到分发的数据
                bus.$on('sendChildValue', value => {
                    console.log(value);
                });
            }
        },
    };
</script>

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

目录
相关文章
|
2天前
|
资源调度 JavaScript API
Vue-treeselect:为Vue应用程序提供强大选择器的指南
Vue-treeselect:为Vue应用程序提供强大选择器的指南
6 0
|
3天前
|
JavaScript
|
1天前
|
JavaScript 开发工具 git
大事件项目40---Vue代码里如何引入相对路径图片
大事件项目40---Vue代码里如何引入相对路径图片
|
2天前
|
JavaScript
vue滚动到页面底部时加载
vue滚动到页面底部时加载
5 1
Vue3组件,注册全局组件和局部组件
Vue3组件,注册全局组件和局部组件
|
2天前
|
JavaScript 前端开发
一个好看的vue admin模板
这是一个关于Vue管理模板的引用,提到了[PanJiaChen](https://github.com/PanJiaChen/vue-admin-template)在GitHub上的`vue-admin-template`项目。该项目是一个前端管理模板,链接指向了详细的资源。页面中还包含了一张图片,但markdown格式中无法直接显示。简而言之,这是关于一个基于Vue的后台管理界面模板的参考信息。
|
2天前
|
JavaScript
vue知识点
vue知识点
5 0
|
3天前
|
JavaScript 前端开发
Vue,如何引入样式文件
Vue,如何引入样式文件
|
3天前
|
JavaScript 前端开发 API
|
3天前
|
JavaScript 前端开发 网络架构
Vue如何实现页面跳转路由,实现单页面跳转
Vue如何实现页面跳转路由,实现单页面跳转