Vue 组件传参总结

本文详细介绍了Vue组件间的多种通信方式,包括props从父到子传递,使用.sync修饰符实现子到父的更新,通过自定义事件emit和@实现双向绑定,利用event bus进行兄弟组件通信,以及使用ref直接调用子组件方法。此外,还讲解了如何在隔代组件间使用provide和inject进行数据传递。这些方法对于理解和实践Vue组件间的通信至关重要。
摘要由CSDN通过智能技术生成

Vue 组件传参的背景

vue的特点之一是组件化开发,那么问题来了,组件中的数据和方法都是独立的,我们如何进行组件之间的交互呢。这个时候就要用到组件传参了

传参的方式

  1. 父子组件
  2. 兄弟组件
  3. 隔代组件

props 父到子

 <div>
    <h1>父组件</h1>
    <son1 v-bind:info="info" v-bind:sex.sync="sex" />
    <h2>{{ info.name }}</h2>
    <h2>{{sex}}</h2>
  </div>
</template>

<script>
import son1 from "./son1.vue";
export default {
  components: {
    son1,
  },
  data() {
    return {
      info: {
        name: "小天",
        age: 24,
      },
      sex:"男"
    };
  },

 props 结合 .sync 子到父 

   使用.sync的时候

子到父传参,使用 this.$emit("update:字段名",数据) 即可实现子到父的传参

 <son1 v-bind:info="info" v-bind:sex.sync="sex" />
 changeSex() {
      //   this.sex = "女";
      this.$emit("update:sex", "女");
    },

 props  子到父  emit 和@自定义事件传参

    <son1 v-bind:info="info"  @sendInfo="getInfo"  />

props: {
    info: {
      type: Object,
      default: () => {
        return {};
      },
    },
  },
 changeSex() {
      //   this.sex = "女";
      //   this.$emit("update:sex", "女")
      this.$emit("sendInfo", "666");
    },

兄弟组件传参

定义全局js文件

import Vue from "vue";

export default new Vue()

兄弟组件a

import bus from "./bus.js";

 bus.$emit("send", 666);

兄弟组件 b

 import bus from "./bus.js";
          
    bus.$on("send", (e) => {
      console.log(e);
    });

ref 调用子组件实例传参

父组件

 <son1 ref="son1"  />
 this.$refs.son1.updateDate("111");

子组件

 updateDate(val) {
      this.msg = val;
    },

ref 调用子组件方法修改数据

父组件

  this.$refs.son1.updateInfo()

子组件

   updateInfo(){
      this.msg = "566666"
    }

$refs['子组件'].children 

当一个子组件在父组件里循环引用得时候,就可以用 this.$refs['子组件'].children[’索引'],获取到对应子组件得的实力,然后操作方法或者修改数据

$parent 在子组件里获取父组件的实例,然后修改父组件数据或者调用父组件方法

this.$parent.sendInfo("666")

sendInfo(val){
   console.log("获取到子组件数据",val)
}

隔代组件传参  provide inject

在vue项目开发的时候,有时候会遇到隔代组件的数据交互,这个时候,我们可以使用 

provide 和 inject传参

祖 组件

  data() {
    return {
      info: {
        name: "小天",
        age: 24,
      },
      sex: "男",
    };
  },
  provide(){
    return{
      sexSendInfo:()=>this.info
    } 
  },

  inject: ["sexSendInfo"],

然后在页面中使用 inject:[”变量名“] 即可

以上是本人常用的vue传参的几种方式,希望能对 大家有所帮助                                                 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值