Vue.js父子组件如何传参?

本文详细介绍了Vue中父子组件间的四种常见传参方式:props用于单向数据流,$emit实现子组件向父组件传递,provide和inject支持多层级通信,而$parent/$children则主要用于访问实例。根据实际需求选择合适的方法进行组件间通信。
摘要由CSDN通过智能技术生成


关于Vue父子组件如何传参,有几种常见的方式:

1. 使用props属性

Props(父组件向子组件传递数据):父组件通过在子组件的标签上使用属性的方式,将需要传递的数据传递给子组件。子组件可以通过props选项接收并使用这些数据。

例子:

<template>
  <div>
    <child-component :message="message"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      message: 'Hello from parent component!'
    }
  }
}
</script>
<template>
  <div>
    {{ message }}
  </div>
</template>

<script>
export default {
  props: ['message']
}
</script>

2. 使用$emit方法

$emit(子组件向父组件传递数据):子组件通过调用 $emit方法,触发父组件监听的事件,并将需要传递的数据作为参数传递给父组件。

例子:

<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello from child component!');
    }
  }
}
</script>
<template>
  <div>
    <child-component @message-sent="handleMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleMessage(message) {
      console.log(message);
    }
  }
}
</script>

以上是Vue父子组件传参的两种常见方式,使用props可以实现父子组件之间的单向数据流动,$emit则可以实现子组件向父组件的数据传递。

3. 使用provide和inject

provide和inject:父组件可以通过provide提供数据,子组件通过inject注入这些数据。这种方式可以实现跨多个层级的组件通信。

例子:

// 父组件
<template>
  <div>
    <child-component></child-component>
  </div>
</template>

<script>
export default {
  provide() {
    return {
      message: 'Hello from parent component',
    };
  },
};
</script>

// 子组件
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  inject: ['message'],
};
</script>
 

4. 使用$parent 和 $children

$parent 和 $children:父组件可以通过 $children属性访问子组件实例,子组件可以通过 $parent属性访问父组件实例。但这种方式不够直观和推荐使用。

例子:

// 父组件
<template>
  <div>
    <child-component></child-component>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log(this.$children[0].message);
  },
};
</script>

// 子组件
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Hello from child component',
    };
  },
  mounted() {
    console.log(this.$parent.message);
  },
};
</script>
 

以上是常见的父子组件传参方式,具体采用哪种方式取决于具体的场景和需求。

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值