组件通信——子传父

Vue传值

Vue.js是一个组件化的前端开发框架,支持父子组件之间的消息传递和数据通信。子组件向父组件传递消息的过程称为“子传父”或“props down,events up”。
具体而言,在Vue.js中,每个组件都可以看作是一个独立的实例,它们之间可以通过特定的Props和Events属性进行双向绑定和通信。子组件在初始化时可以接收来自父组件的数据,并通过props属性绑定这些数据。当子组件需要向父组件发送事件或数据时,可以使用$emit方法触发相应的事件,然后由父组件定义的v-on指令监听并执行相应的操作。
以下是一些关于Vue中props$emit的常用概念:

  1. props:在父组件中通过属性的方式向子组件传递数据或方法,子组件中可以通过props属性来获取相关数据或方法,从而实现父子组件之间的信息共享。
  2. emit:在子组件中通过emit触发自定义事件,并携带需要传递的数据,父组件可以通过v-on监听到这些事件,然后执行相应的操作进行响应。
  3. sync修饰符: 可以简化子组件向父组件派发事件的过程,添加.sync修饰符后,在父组件中更新子组件的状态时,无需手动监听子组件触发的事件,而是可以直接通过v-model语法糖进行处理,简单来说就是对一个prop进行双向绑定。

总之,“子传父”是Vue中非常重要的一个概念,它可以帮助我们更好地维护组件间的数据和功能的分离,同时也能提高程序的可读性和可维护性。对于在实际开发过程中遇到的“子传父”的问题,需要按照Vue框架的规范和约定来解决问题。

传递数据的三种方式

方式一

通过父组件给子组件绑定一个自定义事件实现:子给父传数据(使用@v-on

子组件:通过$emit触发父组件上的自定义事件,发送参数

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.$emit('son',this.value)//触发transfer方法,this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:通过绑定自定义事件,接受子组件传递过来的参数

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  @son="getValue"></Son> 
      <!-- 监听子组件触发的自定义事件事件,然后调用getValue方法 -->
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>

方式二

props实现:子给父传递数据

子组件:

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   props: ['getValue']data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.getValue('son',this.value)//this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  :getValue="getValue"></Son> 
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>

方式三

使用ref

子组件:

<template>
   <div class="son">
     <button @click="setValue">子传值</button>
   </div>
 </template>
 <script>
 export default {
   name: "son",
   data(){
     return {
       value:'子传父的内容'
     }
   },
   methods:{
     setValue(){
       this.$emit('son',this.value)//触发transfer方法,this.value为向父组件传递的数据
     }
   }
 }
 </script>

父组件:

<template>
   <div class="parent">
     <p>父组件接手到的内容:{{ value}}</p>
     <Son  ref="son" ></Son> 
      <!-- 监听子组件触发的自定义事件事件,然后调用getValue方法 -->
   </div>
 </template>
 <script>
 import son from './Son'
 export default {
   name: 'parent',
   data () {
     return {
       msg: '父组件',
       value:'',
     }
   },
   components:{son},
    mounted(){
      setTimeout(() =>{
        // 函数体
        this.$refs.son.$on('son', this.getValue)
      }, 3000)
   },  
   methods:{
     getValue(value){
       this.value= value
     }
   }
 }
 </script>
  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Vue中,可以通过props实现组件向父组件传递参数。引用中提到,相较于props,使用自定义事件的方法实现组件给父组件传参更合理和方便,但props也确实可以实现子传父。 下面是一个示例代码来说明props子传父的使用方法。引用提供了一个组件的示例代码,代码如下: ```javascript <template> <button @click="update()">向父组件发送数据</button> </template> export default { props: ['data'], // 父组件传递的参数 setup(props, { emit }) { const update = () => { emit('send', '我是组件的值') // 发送自定义事件,并传递数据 } return { update } } } ``` 在上面的示例代码中,组件使用了`props`选项来接收父组件传递的参数。在`setup`函数中,我们可以通过`emit`方法来触发一个自定义事件,并传递数据给父组件。在这个示例中,当点击按钮时,会触发`update`方法,然后通过`emit`方法发送`send`事件,并传递字符串数据"我是组件的值"给父组件。 这样,父组件就可以在使用组件时监听`send`事件,从而获取组件传递的参数。通过这种方式,就实现了props子传父的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Vue中组件给父组件传参数————props和自定义事件](https://blog.csdn.net/gdtown/article/details/125499940)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Vue的props父传的示例代码](https://download.csdn.net/download/weixin_38519082/12925956)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vue3 - 组件通信子传父)](https://blog.csdn.net/weixin_44198965/article/details/127875451)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wen先森

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

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

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

打赏作者

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

抵扣说明:

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

余额充值