Vue中父子组件传值

Vue中父子组件传值

父传子

步骤:

1.首先定义父和子组件

2.将父组件想要传递的数据给子组件定义的数据定义在props里面,并将数据表示在子组件的标签里面

3.在父标签里面使用 冒号➕子组件定义的数据名称 ,并且等于后面的用父组件的值去表示(注意要有“”)

代码结构图:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

代码:

<template>
<div>
  <span  >{{datach}}</span>
</div>
</template>

<script>
export default {  
  name: "child",
  props:{
    datach:{
      type:String,
      default:""
    }
  }
}
</script>

<style scoped>

</style>

<template>
<div>
  <span>我是父亲</span>

  <child :datach="dataparent"></child>
</div>
</template>

<script>
import Child from "./child";
export default {
  name: "parent",
  components: {Child},
  data(){
    return{
      dataparent:"孩子的数据data"
    }
  }
}
</script>

<style scoped>

</style>

子传父

步骤:

通过$emit方法

具体步骤:

1.首先,我们需要明确子组件要传递哪一个值(假设: evidence吧)

2.其次,我们需要写一个点击方法,使用$emit来发送事件出去(两个参数,第一个是需要让父组件使用的名称(通常是点击方法名称–有点类似于click),另一个是子组件的数据)

3.通过$emit方法传来的第一个参数(假设materials吧),使用@materials方法去将传递过来的值传递给父组件

代码结构图:

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2TnSTnDG-1642606648591)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220119233403266.png)]

代码:

<template>
<div>
  子组件:
  <span>{{childValue}}</span>
  <!-- 定义一个子组件传值的方法 -->
  <input type="button" value="点击触发" @click="childClick">
</div>
</template>

<script>
export default {
  name: "child",
  data () {
    return {
      childValue:"childValue",
      evidence: '我是子组件的数据'
    }
  },
  methods:{
    // childByValue是在父组件on监听的方法
    // 第二个参数this.childValue是需要传的值
    childClick(){
      this.$emit("materials", this.evidence)//触发 input 事件,并传入新值
    }
  }

}
</script>

<style scoped>

</style>

<template>
<div>
  <span>我是父亲</span>
  <br>
  <span>{{name}}</span>
  <br>
  <br>
  <child  @materials="getMaterials"></child>
</div>
</template>

<script>
import Child from "./child";
export default {
  name: "parent",
  components: {Child},
  data(){
    return{
      name: ''
    }
  },
  methods:{
    getMaterials(evidence) {
      // childValue就是子组件传过来的值
      this.name = evidence
    }
  }
}
</script>

<style scoped>

</style>
Vue 2父子组件之间的数据传递是双向的,主要通过props(属性)和$emit(事件)来实现。以下是一些常见的父子组件传值方法: 1. **Props(属性)**: - **单向数据流**:组件向子组件传递数据使用`props`。组件定义props时,需要指定类型,子组件通过`props`接收数据。例如: ```javascript // 组件 <child-component :value="parentValue" /> // 子组件 props: { value: { type: String, default: '' } } ``` 子组件只能读取props,不能修改,除非组件通过$emit触发自定义事件。 2. **自定义事件($emit)**: - **父子组件间的双向通信**:如果需要子组件组件发送更新,可以使用$emit触发一个自定义事件,如: ```javascript // 子组件 this.$emit('update-value', newValue); // 组件 <child-component @update-value="handleChildValueChange" /> methods: { handleChildValueChange(value) { this.parentValue = value; } } ``` 3. **引用类型(Object/Array)**: - 如果组件传递对象或数组,Vue会默认浅复制。若需要深拷贝,需在子组件处理,例如使用`Vue.extend`或`JSON.parse(JSON.stringify())`。 4. **自定义指令(v-bind、v-on)**: - 可以使用自定义指令如`v-model`在组件间共享数据,但这在Vue 2不是推荐的做法,因为可能会带来性能问题。 5. **$parent/$children/$refs**: - 有时可能需要直接访问组件或子组件的实例,这时可以使用`$parent`、`$children`和`$refs`。但这些选项通常不鼓励滥用,因为它们破坏了组件的封装性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

William_Tao(攻城狮)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值