VueDay06(组件反向传值,多层传值 )

本文详细介绍了Vue中的单向数据流原则,并探讨了多种组件间通信的方法,包括事件修饰符、反向传值、多层传值、$root、$parent、$children、$refs的使用,以及Vue自定义事件和中央事件总线的应用,旨在实现高效的数据管理和组件交互。

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

什么是单向数据流

指的是父组件通过属性传值给子组件如果子组件修改了传过来的值,父组件的对应的属
性是不会改变的,也就是说,渲染到页面的父组件数据是不会变的,所以,有父组件传
给子组件的值不能反向修改(响应),但是父组件数据改变是可以改变子组件的值的,数
据是单向的.

事件修饰符

@事件名.stop  阻止冒泡;

@事件名.prevent 阻止默认事件;

@事件名.capture 监听事件捕获;

@事件名.self  阻止事件捕获、冒泡时触发函数,只能在目标阶段触发该函数如目标阶段节点不是该事件绑定的节点就不会触发函数;

@事件名.once 事件触发一次后就会解绑;

@事件名.native组件事件设置为官方提供的原生事件

:msg.sync='msg' 如果单单是修改父组件属性数据,就可以用这个修饰,父组件就可以不用写触发函数了

反向传值方式

父组件给子组件传值可以用自定义属性传值,用props接收但是这样做当子组件修改
传过来的值是不会修改父组件的值的,换句话说就是页面父组件数据不会发生变化;
解决方案:反向传值(可以理解为双向绑定)

方式一:父组件用自定义事件即定义事件处理函数(@自定义函数名='事件处理函数')
子组件用this.$emit('函数名','传参')设置自定义函数的触发条件这样父组件可
以接收到条件触发时传过来的数据,进而修改父组件的值,这样达到子组件修改父组件
传的值,且页面数据变化.
用法:
父组件:<box @myclick='fn' :data='msg'></box>
fn在methods里面
子组件:在条件触发的函数代码块写 this.$emit('myclick','修改后的值');

示例:

<!-- 父组件:首先导入组件再注册用于template标签中 如:box组件 结合自定义属性传值-->
<template>
 <box @myclick='fn' :data='msg'></box>
</template>
<script>
export default {
     
     
    data(){
     
     
    return {
     
     
        msg:'父组件数据'
    }
},
 components:{
     
     
        box,
    }
  methods:{
     
     
      fn(){
     
     
          //事件处理函数代码块
      },
  } 
}
</script>
 <!-- 子组件 利用this.$emit('自定义函数名','参数') -->
<template>
    <div>
        <h3>父组件传过来的值--- {
  
  {data}}</h3>
        <button @click="fn" >子组件修改父组件的值</button>
    </div>
</template>
<script>
export default {
     
     
    props:['data'],
    methods: {
     
     
        //自定义事件触发条件
        fn(){
     
     
            this.$emit('myclick','修改后的值');
        }
    },
}
</script>
方式二:v-model语法糖 原理方式一相同,v-model底
层绑定了input事件以及value属性,可以利用这一
点,做到反向传值,只不过子组件只能用value接收
数据,以及input进行事件触发,父组件不写事件
处理函数;

示例:

<!--父组件 如:box2 -->
<template>
<!--msg是绑定的data中的属性 -->
 <box3 v-model='msg'></box3>
</template>
<script>
export default {
     
     
    data(){
     
     
    return {
     
     
        msg
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值