Vue组件间通信方式超详细(父传子、父传后代、子传父、后代传父、兄弟组件传值)

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

一、父传子、父传后代

方式一:子通过props来接收

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript
父组件:父组件引入子组件时,通过<child :parentValue = "parentValue"></child>子组件传值。

备注:这种方式父传值很方便,但是传递给后代组件不推荐(父->子->孙),且这种方式父组件不能直接修改父组件传过来的数据。

<template>
  <div>
    <h1>父组件</h1>
    <child :parentValue = "parentValue"></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
        parentValue:"父组件内的值"
      }
    }
  }
</script>
<style scoped>

</style>

子组件:子组件通过props即props:{ parentValue:{ type:String, default:"" } }来接收父组件传过来的值

<template>
  <div>
    <h2>子组件</h2>
    <hr>
    <span>{{parentValue}}</span>
  </div>
</template>

<script>
  export default {
    name: 'child',
    props:{
      parentValue:{
        type:String,
        default:""
      }
    },
    data () {
      return {
      }
    },
  }
</script>
<style scoped>

</style>

方式二:通过this.$parent.xxx子组件直接使用父组件的值

备注:这种方式,子组件可以直接修改父组件的数据。

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript
父组件:正常引入子组件

<template>
  <div>
    <h1>父组件</h1>
    <child></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
        parentValue:"父组件内的值"
      }
    }
  }
</script>

子组件:通过this.$parent.parentValue获取父组件的数据。

<template>
  <div>
    <h2>子组件</h2>
    <span>我是通过this.$parent.xxx直接获取父组件的值:</span>
    <br>
<!--    <span>{{this.$parent.parentValue}}</span>-->
    <span>{{parentValueToSon}}</span>
  </div>
</template>

<script>
  export default {
    name: 'child',
    data () {
      return {
        parentValueToSon:"",
      }
    },
    created() {
      this.parentValueToSon = this.$parent.parentValue;
    }
  }
</script>

方式三:依赖注入provide/inject

备注:这种方式父组件可以直接向某个后代组件传值,不用再一级一级的传递。

缺点:很难去找这个值是从哪个组件传递过来的。

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript
父组件:通过provide定义需要传递给后代的数据。

<template>
  <div>
    <h1>父组件</h1>
    <hr>
    <child></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
      }
    },
    //通过依赖注入方式传递给后代的数据
    provide(){
      return{
        parentProvideValue:"依赖的父组件的值"
      }
    }
  }
</script>

子组件:

<template>
  <div>
    <h2>子组件</h2>
    <span>我是通过this.$parent.xxx直接获取父组件的值:</span>
    <br>
    <!--<span>{{this.$parent.parentValue}}</span>-->
    <span>{{parentValueToSon}}</span>
    <hr>
    <grandson></grandson>
  </div>
</template>

孙子组件:通过inject注入爷爷辈组件传递过来的值。

<template>
  <div>
    <h3>孙子组件</h3>
    <span>获取到的爷爷辈组件传递过来的值:</span>
    <br>
    <span>{{parentProvideValue}}</span>
  </div>
</template>

<script>
  export default {
    name: 'grandson',
    //获取父组件传递过来的值
    inject:['parentProvideValue'],
    data () {
      return {
      }
    }
  }
</script>
<style scoped>

</style>

效果图:

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript

二、子传父、后代传父

方式一:this.$emit(“function”,param)

子组件通过$emit传递一个函数和参数,父组件通过传递过来的函数接收参数即传过来的值。

父子组件一般会触发交互行为(子组件传递过来的值放在生命周期函数里是传不过来的),所以可以通过父子的交互行为获取到子组件传递过来的数据。

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript
父组件:通过子组件自定义的函数进行绑定接收传递过来的数据。

<template>
  <div>
    <h1>父组件</h1>
    <span>接收到子组件传递过来的值:</span>
    <span>{{getSonToParentValue}}</span>
    <hr>
    <child @tansToParent = "tansToParent"></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
        getSonToParentValue:"",
      }
    },
    mounted() {
    },
    methods:{
      tansToParent(val) {
        this.getSonToParentValue = val;
        console.log("子组件传递过来的值",val)
      }
    }
  }
</script>

子组件:通过this. e m i t ( " f u n c t i o n " , p a r a m ) 子组件通过 emit("function",param) 子组件通过 emit("function",param)子组件通过emit传递一个函数和参数,父组件通过传递过来的函数接收参数即传过来的值。

<template>
  <div>
    <h2>子组件</h2>
    <button @click="toParentValue">子组件按钮</button>
    <hr>
    <grandson></grandson>
  </div>
</template>

<script>
  import Grandson from "./grandson";
  export default {
    name: 'child',
    components: {Grandson},
    data () {
      return {
        childValue:"子组件传递给父组件的值",
      }
    },
    created() {

    },
    methods:{
      toParentValue(){
        //通过this.$emit给父组件传值
        this.$emit('tansToParent',this.childValue)
      }
    }
  }
</script>

效果图:

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript

方式二:this.$child.xxx直接获取子组件数据,且可直接修改子组件的数据。

父组件:this.$children[0].childValue获取子组件数据,只有一个子组件故下标为0.

<template>
  <div>
    <h1>父组件</h1>
    <span>接收到子组件传递过来的值:</span>
    <span>{{getSonToParentValue}}</span>
    <hr>
    <child></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
        getSonToParentValue:"",
      }
    },
    mounted() {
      this.getSonToParentValue = this.$children[0].childValue
    }
  }
</script>

子组件:

<template>
  <div>
    <h2>子组件</h2>
    <button>子组件按钮</button>
    <hr>
    <grandson></grandson>
  </div>
</template>

<script>
  import Grandson from "./grandson";
  export default {
    name: 'child',
    components: {Grandson},
    data () {
      return {
        childValue:"子组件传递给父组件的值",
      }
    },
    created() {

    },
    methods:{
    }
  }
</script>

方式三:通过ref/refs获取子组件dom从而直接获取子组件数据。可直接修改子组件数据。

父组件:

<template>
  <div>
    <h1>父组件</h1>
    <span>接收到子组件传递过来的值:</span>
    <span>{{getSonToParentValue}}</span>
    <hr>
    <child ref="childDom"></child>
  </div>
</template>

<script>
  import Child from "./child";
  export default {
    name: 'parent',
    components: {Child},
    data () {
      return {
        getSonToParentValue:"",
      }
    },
    mounted() {
      this.getSonToParentValue = this.$refs.childDom.childValue
    }
  }
</script>

子组件与上述相同。

三、兄弟组件传值

方式一:通过中转eventBus.js工具类

新建一个中转eventBus.js工具类,传值的兄弟组件自定义一个函数通过

eventBus.$emit('function',参数);

给接收值的兄弟组件传一个约定好的function名称及参数(即传递的值);接收值的兄弟组件通过

eventBus.$on('function',val=>{
  console.log("传递过来的值",val)
})

来接收传递过来的值。

vue父组件向孙子组件传值,笔记,vue.js,前端,javascript
eventBus.js:

import Vue from 'vue'
export default new Vue();

传值的兄弟组件:

<template>
  <div>
    <h2>子组件</h2>
    <button @click="toBrother">点击给兄弟组件传值</button>
  </div>
</template>

<script>
  import Grandson from "./grandson";
  import eventBus from "../utills/eventBus";
  export default {
    name: 'child',
    components: {Grandson},
    data () {
      return {
        transToBrother:"这是传递给兄弟组件的值",
      }
    },
    methods:{
      toBrother(){
        eventBus.$emit('toBrotherFunc',this.transToBrother);
      }
    }
  }
</script>

接收值的兄弟组件:

<template>
  <div>
    <h3>孙子组件</h3>
    <span>兄弟组件传递过来的值:</span>
    <span>{{eventBusValue}}</span>
  </div>
</template>

<script>
  import eventBus from "../utills/eventBus";
  export default {
    name: 'grandson',

    data () {
      return {
        eventBusValue:"",
      }
    },
    created() {
      eventBus.$on('toBrotherFunc',val=>{
        this.eventBusValue = val;
      })
    }
  }
</script>

效果图:
vue父组件向孙子组件传值,笔记,vue.js,前端,javascript文章来源地址https://www.toymoban.com/news/detail-745392.html

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

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

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

相关文章

  • element 级联 父传子

    element 级联 父传子

    html代码例子 父组件 子组件 ts 例子展示 单位级联展示 根据单位加载系统项目

    2024年02月15日
    浏览(11)
  • vue 子组件向父组件传递参数 子传父

    vue 子组件向父组件传递参数 子传父

    子组件中写: this.$emit(\\\'RowCount\\\',res.data.RowCount); 父组件中写:             getMFGLRowCount(val){                 //父组件中的方法: 接收子组件传过来的参数值赋值给父组件的变量                 //this.totalCount = val;                 alert(\\\"这是父组件 methods 中的方法

    2024年02月09日
    浏览(12)
  • vue组件间通信方式

    组件之间的通信是指不同组件之间在共享数据、传递消息或触发事件等方面进行交流和协作的过程。在应用程序中,不同的组件可能需要相互传递数据、共享状态、触发动作或响应事件等,以实现组件之间的协调和交互。 vue组件之间的通信可以有多种形式和方式,常见的包括

    2024年02月11日
    浏览(13)
  • vue组件通信方式汇总

    vue组件通信方式汇总

    之前学习了组件通信的6中方式 1-props :使用场景:【 父组件给子组件传递数据 】 传递数据类型: 可能是函数:实质是子组件想给父组件传递数据; 可能不是函数:实质就是父组件给子组件传递数据 特殊情况:路由传递props 1:布尔值类型,把路由中params参数映射为组件pro

    2024年02月02日
    浏览(10)
  • vue组件之间通信方式

    一、全局事件总线 范围 :任意组件间 步骤 :1、创建事件总线 第一种方式:通过自定义事件总线方式 局部引用 第二种方式:通过原型绑定 main.js 局部引用 解绑事件 二、props和$emit 范围 :父子组件间 父组件 子组件 三、Vuex(状态管理) 范围 :多个组件之间共享状态,可以

    2024年03月10日
    浏览(8)
  • Vue 组件通信方式

    Vue 组件通信方式

    在当今Web开发领域中,构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架,正是为了满足这些需求而诞生。它采用了MVVM架构模式,并通过数据驱动和组件化的方式,使我们能够更轻松地构建出优雅而高效的Web应用程序。

    2024年01月22日
    浏览(5)
  • vue 组件之间通信的方式

    1.父向子版  父组件设置自定义属性 子组件props接收 2.子向父版 父组件设置自定义方法并绑定接收的方法 子组件触发方法  3.全局事件总线   4.Vuex 用这个的话首先要装包或者创建工程的时候选择这个选项手脚架会给你装好 5.路由 抽象一点说路由也算通信方式的一种吧 这种

    2024年01月18日
    浏览(11)
  • vue前端开发自学,父子组件传递数据,借助于Props实现子传父

    vue前端开发自学,父子组件传递数据,借助于Props实现子传父

    vue前端开发自学,父子组件传递数据,借助于Props实现子传父! 之前我们说过,Props这个是用在父传子的情况下,今天为大家介绍的代码,就是在父组件里,自定义事件,绑定一个函数,让子组件可以接受到这个自定义事件绑定的函数,从而“委婉”的传递数据给父组件。 如图

    2024年01月23日
    浏览(10)
  • Vue组件的通信方式有哪些?

    Vue组件的通信方式有哪些?

    开始之前,我们把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,vue中每一个 .vue 文件我们都可以视之为一个组件。通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,任何信息的交通都是通信组件间通信,即

    2023年04月10日
    浏览(7)
  • 在vue中不同组件通信方式

    1.父子组件,通过prop 2.非父子组件,通过vuex或根vue转载器 一般是以上两种情况,但是还有一种比较特殊的情况,即孙子组件或更深层次的组件通信 上述如果父组件需要与grandson通信,除了vuex,必须先与son组件通信,再由son与grandson通信,在层级少的情况下没有问题,但是层

    2024年01月24日
    浏览(7)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包