vue 父子组件通信

该博客主要介绍了Vue父子组件通讯的相关内容。包括父向子的数据传递,如使用特定方式传递数据及动态传递;还介绍了子向父的数据传递,如通过自定义事件和.sync修饰符,其中.sync修饰符可实现双向数据绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

父 -> 子的数据传递

使用 Props 传递数据

父组件

<template>
  <div class="parent">
    <son :number="num"></son>
  </div>
</template>

<script>
import son from './children/son'

export default {
  name: 'parent',
  data () {
    return {
      num: 1
    }
  },
  components:{
    son
  }
}
</script>

子组件

<template>
  <div class="son">
    {{number}}
  </div>
</template>

<script>
export default {
  name: 'son',
  props:{
    number:Number
  }
}
</script>

子组件显示 0

动态 Props

修改父组件

<template>
  <div class="parent">
    <son :number="num"></son>
  </div>
</template>

<script>
import son from './children/son'

export default {
  name: 'parent',
  data () {
    return {
      num: 1
    }
  },
  mounted () {
    setTimeout(() => {
      this.num = 99;
    }, 3000);
  },
  components:{
    son
  }
}
</script>

子组件先显示 0, 3 秒后显示 99

子 -> 父的数据传递

自定义事件

父组件

<template>
  <div class="parent">
    <son :number="num" @reset="resetNum"></son>
  </div>
</template>

<script>
import son from './children/son'

export default {
  name: 'parent',
  data () {
    return {
      num: 0
    }
  },
  mounted () {
    setTimeout(() => {
      this.num = 99;
    }, 3000);
  },
  methods: {
    resetNum (data) {
      this.num = data;
    }
  },
  components:{
    son
  }
}
</script>

子组件

<template>
  <div class="son">
    {{number}}
    <button @click="reset">reset</button>
  </div>
</template>

<script>
export default {
  name: 'son',
  props:{
    number:Number
  },
  methods: {
    reset () {
      this.$emit('reset', 0)
    }
  }
}
</script>

此时, 子组件初始显示 0, 3 秒后显示 99, 点击 reset 重新显示 0

.sync 修饰符

实现双向数据绑定的语法糖

父组件

<template>
  <div class="parent">
    <son :number.sync="num"></son>
  </div>
</template>

<script>
import son from './children/son'

export default {
  name: 'parent',
  data () {
    return {
      num: 0
    }
  },
  mounted () {
    setTimeout(() => {
      this.num = 99;
    }, 3000);
  },
  components:{
    son
  }
}
</script>

子组件

<template>
  <div class="son">
    {{number}}
    <button @click="reset">reset</button>
  </div>
</template>

<script>
export default {
  name: 'son',
  props:{
    number:Number
  },
  methods: {
    reset () {
      this.$emit('update:number', 0)
    }
  }
}
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值