VUE 父子组件、兄弟组件 之间通信 最强详解

这篇具有很好参考价值的文章主要介绍了VUE 父子组件、兄弟组件 之间通信 最强详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 父组件 调用 子组件 内参数/方法

1.1 通过 ref 调用/获取 子组件内参数/方法

2. 子组件 调用 父组件 内参数/方法

2.1 通过 emit 调用 父组件方法

2.2 通过 props 调用 父组件方法/参数

2.3 通过 this.$parent 调用 父组件方法/参数

3. 兄弟组件 通信

3.1 通过 bus 进行 兄弟组件 通信

3.2 通过 父组件 让兄弟组件 进行通信


简单 总结:

1.1 通过 ref 调用/获取 子组件内参数/方法

实现:就是在 你想要访问的组件上 通过 ref 注册引用信息,然后依靠 this.$refs 调用 组件内的方法以及参数。

2.1 通过 emit 调用 父组件方法

实现:将 要在子组件中 想调用的父组件方法,通过【@】配置至组件上,然后通过this.$emit()来调用。

2.2 通过 props 调用 父组件方法/参数

实现:将 要在子组件中 想调用的父组件方法/父组件参数,通过 【:】配置至组件上,接着在子组件的 props 内进行接收,然后直接通过 this.来调用就行。

2.3 通过 this.$parent 调用 父组件方法/参数

实现:呃,啥也不用弄,只要保持当前组件上面有个父组件就行,直接通过 this.$parent 调用就行。

3.1 通过 bus 进行 兄弟组件 通信

实现:通过 new Vue() 生成一个 bus 总线,然后在想要接收通信的组件内设置 bus.$on, 在想要发起通信的组件内使用 bus.$emit。

3.2 通过 父组件 让兄弟组件 进行通信

子组件1 传值 给父组件,父组件 传值 给子组件2

想了解 ref、$refs、$parent  请看我的另一篇文章:http://t.csdn.cn/66Fkt

1. 父组件 调用 子组件 内参数/方法

1.1 通过 ref 调用/获取 子组件内参数/方法

步骤:

a 父组件 => 在 子组件元素上 设置 ref='名称'

b 父组件 => 然后通过 使用 this.$refs.名称.参数/方法 调用方法/参数

想了解 ref 请看我的另一篇文章:http://t.csdn.cn/66Fkt

先看截图,再看代码

VUE 父子组件、兄弟组件 之间通信 最强详解

<template>
  <div class="box">

      <div>我是父组件</div>

      <div>{{ value }}</div>
      <button @click="handleFetchBaby1Param" class="button">获取 baby1 内参数</button>
      <button @click="handleFetchBaby1Function" class="button">调用 baby1 内方法</button>
      
      <!-- 通过 ref 在 baby1 组件身上 注册引用信息 -->
      <baby1 ref="baby1" class="border"></baby1>
      
  </div>
</template>

<script>
import baby1 from '@/components/html/baby1.vue'
export default {
  name: 'home',
  components:{
    baby1
  },
  data(){
    return{
      value: ""
    }
  },
  methods:{
    // 获取 baby1 内参数
    handleFetchBaby1Param(){
      this.value = this.$refs.baby1.value;
    },
    // 调用 baby1 内方法
    handleFetchBaby1Function(){
      this.$refs.baby1.handleBaby1Self()
    }
  }
}
</script>
<template>
  <div class="box">
        <div>我是子组件1</div>
        <input v-model="value" style="width: 100%">
  </div>
</template>

<script>

export default {
    name: 'baby1',
    data(){
        return{
            value: null
        }
    },
    methods: {
        // Baby1 组件
        handleBaby1Self(){
            this.value = this.value + 1;
            console.log('Baby1 组件 内方法被调用 =>', this.value)
        }
    }
}
</script>

2. 子组件 调用 父组件 内参数/方法

2.1 通过 emit 调用 父组件方法

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法

b 父组件 => 将准备好的方法 需要通过@ 挂载至 组件元素上 (举例:<baby1 @childConsole='parentConsole'></baby1> )

c 子组件 => 在子组件内 通过 this.$emit('方法名', 参数1,参数2...) 调用

先看截图,再看代码

VUE 父子组件、兄弟组件 之间通信 最强详解

<template>
  <div class="box">
      <div>我是父组件</div>
      <div>{{ name }}</div>
      <!-- 通过 @ 将事件挂载 在组件上 -->
      <baby1 @childConsole='parentConsole'></baby1> 
  </div>
</template>

<script>
import baby1 from '@/components/html/baby1.vue'
export default {
  name: 'home',
  components:{
    baby1
  },
  data(){
    return{
      name: '',
    }
  },
  methods:{
    parentConsole(name){
      this.name = name;
      console.log('父组件 的 方法被调用', this.name)
    }
  }
}
</script>
<template>
  <div class="box">
        <div>我是子组件</div>
        <input v-model="value" style="width: 100%">
        <button @click="handleFetchHomeFunction">调用 父组件 方法</button>
  </div>
</template>

<script>
export default {
    name: 'baby1',
    data(){
        return{
            value: ''
        }
    },
    methods: {
        // 调用 父组件方法
        handleFetchHomeFunction(){
            this.$emit('childConsole', this.value)
        }
    }
}
</script>

2.2 通过 props 调用 父组件方法/参数

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法/参数

b 父组件 => 将准备好的方法 需要通过: 将 方法/参数 挂载至 组件元素上 (举例:<baby1 :childConsole='parentConsole' :mail='mail'></baby1> )

c 子组件 => 在 子组件 props 中 配置 接收来自父组件的方法/参数

d 子组件 => 在子组件内 通过 this.方法名(参数1,参数2...) 调用 / this.参数名 获取

先看截图,再看代码

VUE 父子组件、兄弟组件 之间通信 最强详解

<template>
  <div class="box">
      <div>我是父组件</div>
      <div>{{ name }}</div>
      <!-- 通过 : 将 方法/参数 挂载 在组件上 -->
      <baby1 :childConsole='parentConsole' :mail='mail'></baby1> 
  </div>
</template>

<script>
import baby1 from '@/components/html/baby1.vue'
export default {
  name: 'home',
  components:{
    baby1
  },
  data(){
    return{
      name: '',
      mail: 'xxxx@qq.com'
    }
  },
  methods:{
    parentConsole(name){
      this.name = name;
      console.log('父组件 的 方法被调用', this.name)
    }
  }
}
</script>
<template>
  <div class="box">
        <div>我是子组件</div>
        {{ mail }}
        <input v-model="value" style="width: 100%">
        <button @click="handleFetchHomeFunction">调用 父组件 方法</button>
  </div>
</template>

<script>
export default {
    name: 'baby1',
    // 通过 配置 props 接收来自的方法/参数
    props:{
        // 接受 方法
        childConsole:{
            type: Function,
            require: true,
            default: null
        },
        // 接受 参数
        mail:{
            type: String,
            require: true,
            default: null
        },
    },
    data(){
        return{
            value: ''
        }
    },
    methods: {
        // 调用 父组件方法
        handleFetchHomeFunction(){
            this.childConsole(this.value)
            console.log('mail =>', this.mail)
        }
    }
}
</script>

2.3 通过 this.$parent 调用 父组件方法/参数

步骤:

a 父组件 => 首先 在父组件内准备好 被 子组件调用的方法/参数

b 子组件 => 在子组件内 通过 this.$parent.父组件方法名(参数1,参数2...) 调用方法 / this.$parent.父组件内参数名 获取参数

想了解 $parent 请看我的另一篇文章:http://t.csdn.cn/66Fkt

先看截图,再看代码

VUE 父子组件、兄弟组件 之间通信 最强详解

<template>
  <div class="box">
      <div>我是父组件</div>
      <div>{{ name }}</div>
      <baby1></baby1> 
  </div>
</template>

<script>
import baby1 from '@/components/html/baby1.vue'
export default {
  name: 'home',
  components:{
    baby1
  },
  data(){
    return{
      name: '',
      age: 18,
    }
  },
  methods:{
    parentConsole(name){
      this.name = name;
      console.log('父组件 的 方法被调用', this.name)
    }
  }
}
</script>
<template>
  <div class="box">
        <div>我是子组件</div>
        {{ age }}
        <input v-model="value" style="width: 100%">
        <button @click="handleFetchHomeFunction">调用 父组件 方法</button>
  </div>
</template>

<script>
export default {
    name: 'baby1',
    data(){
        return{
            value: '',
            age: null,
        }
    },
    methods: {
        handleFetchHomeFunction(){
            // 调用 父组件方法
            this.$parent.parentConsole(this.value);
            // 获取 父组件参数
            this.age = this.$parent.age;
        }
    }
}
</script>

3. 兄弟组件 通信

3.1 通过 bus 进行 兄弟组件 通信

步骤:

a 在 main.js 文件内 将 new Vue() 挂载至 vue 原型上。这样方便使用,不用到处导入

b 在 接受 通信的组件内 使用 this.$bus.$on() 进行初始化

c 在 发起通信 组件内 使用 this.$bus.$emit('方法名', 参数1, 参数2...)

先看截图,再看代码

VUE 父子组件、兄弟组件 之间通信 最强详解

// mian.js

import Vue from 'vue'
import App from './App'
import router from './router'

Vue.prototype.$bus = new Vue(); // 设置 挂载至 vue 的原型上

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
<template>
  <div class="box">
      <div>我是父组件</div>

      <div style="display: flex">
        <!-- 子组件 1 (-_- 我和 子组件2 是同级关系 所以是兄弟组件 -_- )-->
        <baby1 class="border"></baby1>
        <!-- 子组件 2 (-_- 我和 子组件1 是同级关系 所以是兄弟组件 -_- )-->
        <baby2 class="border"></baby2> 
      </div>
      
  </div>
</template>

<script>
import baby1 from '@/components/html/baby1.vue'
import baby2 from '@/components/html/baby2.vue'

export default {
  name: 'home',
  components:{
    baby1,
    baby2
  }
}
</script>
<template>
  <div class="box">
        <div>我是子组件1</div>
        <input v-model="value" style="width: 100%">
        <button @click="handleFetchHomeFunction">将值 更新至 子组件2</button>
  </div>
</template>

<script>

export default {
    name: 'baby1',
    data(){
        return{
            value: ''
        }
    },
    methods: {
        // 调用 兄弟组件 方法
        handleFetchHomeFunction(){
            this.$bus.$emit('valueUpdate', this.value)
        }
    }
}
</script>
<template>
  <div class="box">
        <div>我是子组件2</div>
        <input v-model="value" style="width: 100%">
  </div>
</template>

<script>


export default {
    name: 'baby1',
    data(){
        return{
            value: ''
        }
    },
    mounted(){
        // 接收 事件
        this.$bus.$on('valueUpdate', (value)=>{
            this.value = value;
        })
    },
}
</script>

3.2 通过 父组件 让兄弟组件 进行通信

因为相比较 bus 不是很方便,兄弟通信尽量用 bus 就好,所以这里就不放代码了,直接说一下思路

子组件1 传值 给父组件,父组件 传值 给子组件2

博主清楚 文章排版的好坏,会导致 阅读者 能否更好的理解内容!

所以 如果你有 好的排版想法,可以私信给我呦!文章来源地址https://www.toymoban.com/news/detail-451422.html

到了这里,关于VUE 父子组件、兄弟组件 之间通信 最强详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web前端 ---- 【Vue】(组件)父子组件之间的通信一文带你了解

    目录 前言 父组件传子组件 ---- props 给要传递数据的子组件绑定要传过去的属性及属性值 在子组件中使用props配置项接收 props配置项 子组件传父组件 ---- 组件的自定义事件 子组件向父组件传递数据 通过代码来绑定自定义事件 本文将介绍在Vue中父子组件如何进行通信 这里先介

    2024年02月05日
    浏览(117)
  • react 组件之间的通信(父子组件)

    React中 组件内调用其他组件不需要进行 类似于vue 声明组件(components) React 组件内调用其他组件 直接将组件导入 放置在对应的JSX 代码中 父子组件通信(传统): 1、父组件-子组件  通过属性传递 2、子组件-父组件  父组件通过将自身的函数对象传递给子组件, 子组件执行父组件

    2024年02月08日
    浏览(67)
  • 微信小程序----父子组件之间通信

    1、属性绑定 用于父组件向子组件的指定属性设置数据,仅能设JSON兼容的数据 创建组件  将组件全局共享  对应的父页面进行调用  在子组件的js中定义参数  子组件展示数据  最终效果 2、事件绑定 用于子组件向父组件传递数据,可以传递任意数据 步骤: 1、在父组件的

    2024年02月06日
    浏览(50)
  • 微信小程序-父子组件之间的通信

    父子组件之间通信的3种方式: 属性绑定 用于父组件向子组件的指定属性设置数据,仅能设置JSON兼容的数据 子组件在properties节点中声明对应的属性并使用。代码: 事件绑定 用于子组件向父组件传递数据,可以传递任意数据 事件绑定用于实现子向父传值,可以传递任意类型

    2024年02月03日
    浏览(61)
  • 微信小程序父子组件之间通信的 3 种方式

    父子组件之间通信的 3 种方式 ① 属性绑定 ⚫ 用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容的数据 ② 事件绑定 ⚫ 用于子组件向父组件传递数据,可以传递任意数据 ③ 获取组件实例 ⚫ 父组件还可以通过 this.selectComponent() 获取子组件实例对象,这样就可以直

    2024年02月09日
    浏览(48)
  • Vue 兄弟组件通信

    在 Vue 3 中,以下是五种常用的方法来实现兄弟组件之间的通信: 使用共享状态(Shared State):创建一个共享的数据仓库(store),可以使用 Vuex 或者 Vue 3 的新特性 Composition API 中的 reactive 或 ref 创建一个响应式的状态对象,并在兄弟组件中引入这个共享状态。通过修改共享状

    2024年01月18日
    浏览(33)
  • vue父子组件之间传值的方法

    父传子 方式: props 效果: 把父组件的 fatherName 属性传入子组件,在子组件中使用 父组件代码: 子组件代码: 子传父 方式: $emit 效果: 在子组件触发事件,修改父组件的fatherName属性 父组件代码: 子组件代码: 兄弟传值 方式: eventBus.js 效果: 任意组件之间相互传值 代

    2024年02月09日
    浏览(46)
  • vue父子组件之间的传参的几种方式

    这是最常用的一种方式。通过props选项,在父组件中传递数据给子组件。在子组件中使用props声明该属性,就可以访问到父组件传递过来的数据了。 子组件向父组件传递数据的方式。在子组件中使用emit方法触发一个自定义事件,并通过参数传递数据。在父组件中监听这个事件

    2023年04月24日
    浏览(71)
  • Vue组件通信——父子组件通信的四种方法

    全局引入 在main.js文件中引入并注册 之后就可以全局使用组件了 局部引入 在父组件中引入 之后就可以在父组件中使用组件了 在子组件 prop 中可以注册一些自定义组件属性,父组件调用子组件时可以向 prop 中的自定义属性传值。 子组件代码: 父组件代码 prop 也可以通过 v-

    2023年04月16日
    浏览(104)
  • vue父子组件之间双向数据绑定的(vue2/vue3)

    vue父子组件之间双向数据绑定的四种方法(vue2/vue3) vue考虑到组件的可维护性,是不允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(第一种方式),通过这种间接的方式改变父组件的data,从而实现子组

    2024年02月08日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包