vue组件间传值的几种方法

一丶父子组件传值

  1. 先在父组件中给子组件的自定义属性绑定一个 父组件的变量
    1
    2
    3
    <template class="father">
       <child :自定义属性名="父组件的变量"></child>
    <template >

    2、在子组件的props属性中可以取出父组件给的值,props中的变量用法和data中变量用法完全一样,只不过值的来源不同

    1
    2
    3
    4
    5
    export default {
        name: "child",
        props: ["自定义属性名"],
        data() {}
    }

      

    二丶子父组件传值

    1. 先在父组件中给子组件的 自定义属性 绑定一个父组件的函数
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      <template class="father"> 
          <child  @自定义事件="父的处理函数">
      <template >
      export default {
          name: "father",
          data() {}
          methods:{
              父的处理函数(参数){
                  //参数:得到子组件触发事件($emit)时,传递过来的数据
              }
          }
      })

        

      1. 在子组件中 this.$emit(“父的处理函数”,this.数据) 触发父组件中的函数进行传参

      三丶兄弟组件传值

      事件总线:

      就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件

      1. 创建全局空Vue实例:eventBus
        1
        2
        3
        import Vue from 'vue';
        const eventBus= new Vue()  //创建事件总线
        export default eventBus;

         2、 具体页面使用$emit发布事件 - 传递值

        1
        2
        import eventBus from '@u/eventBus'
        eventBus.$emit('send',‘hello’)

          3、具体页面使用$on订阅事件 - 接收组件值

        1
        2
        3
        import eventBus from '@u/eventBus'
        eventBus.$on('send', msg => {
            console.log(msg)  //控制台输出 hello

注意:$on先进行监听,一旦$emit发布事件后所有组件都可以$on监听到事件。所以传递参数的时候一定已经先进行了监听才能得到参数。比如在父组件中$emit事件放在mounted钩子函数中,等待子组件创建并$on开始监听事件后再去触发$emit发布事件。

$off()移除事件监听

1
2
import eventBus from '@u/eventBus'
eventBus.$off('send')

  事件订阅功能$on是$eventBus对象完成的,与组件无关,如果用v-if销毁子组件的时候,会形成闭包,造成内存泄露,所有要在销毁组件的时候进行取消监听事件

四丶$parent /$children与ref

  1. $parent方法是在子组件中可以直接访问该组件的父实例或组件。

    在父组件中定义一个切换显示页面执行中的显示方法。

    1
    2
    3
    4
    5
    switchLoadPage(msg) {
        if(!this.loading && msg)
            this.loadtext=msg;
            this.loading = !this.loading;
    },

      在子组件中直接通过$parent去调用该方法

    1
    this.$parent.switchLoadPage();

      

    $children方法是在父组件中可以直接访问子组件的实例,但是不保证子组件的顺序。

    ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例。

    在父组件中自定义一个表格组件,给子组件加上 ref属性

    1
    <result ref="result" :config="dgConfig"  ></result>

      在父组件中就可以通过this.$refs.result去找到result子组件进行操作,比如把父组件的sdata直接放入子组件中

    1
    2
    3
    4
    5
    methods: {
        info(){
            this.$refs.result.sdata = this.sdata;
        },
    }

      

posted @   杨远宁  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示